Чтение шестнадцатеричного текстового формата 0x из потока

Я ищу простой метод для чтения шестнадцатеричного значения из текстового файла с использованием потоков. Я искал переполнение стека, используя «C ++ hex read stream 0x», и большинство ответов касалось записи в шестнадцатеричном формате как текста или чтения в шестнадцатеричном формате без префикса «0x». Этот вопрос касается чтения шестнадцатеричного числа с префиксом «0x» в качестве числа за одну операцию.

Мой метод:

unsigned char byte;
std::istringstream sample("0xce");
sample >> std::hex >> byte;

Заканчивается байтом , содержащим '0' (0x30) с первого

Функция 'strtol` обрабатывает преобразование, но требует чтения данных, преобразования в строку стиля C.

Я перегружаю оператор >> в классе, чтобы прочитать Текстовый файл со значениями, разделенными запятыми (CSV). Вот образец файла данных:

1,-4.93994892,0xa5,8,115.313e+3,
2,-4.93986238,0xc0,8,114.711e+3,
3,-4.93977554,0xc2,8,114.677e+3,

Мой метод извлечения:

class Csv_Entry
{
public:
    friend std::istream& operator >>(std::istream& inp, Csv_Entry& ce);
    unsigned int    m_index;
    double      m_time;
    unsigned char   m_byte;
    unsigned int    m_data_length;
    double      m_bit_rate;
};

std::istream&
operator >> (std::istream& inp, Csv_Entry& ce)
{
    char    separator;
    inp >> ce.m_index;
    inp >> separator;
    inp >> ce.m_time;
    inp >> separator;
    inp >> std::hex >> ce.m_byte;
    inp >> separator;
    inp >> ce.m_data_length;
    inp >> separator;
    inp >> ce.m_bit_rate;
    inp.ignore(10000, '\n');
    return inp;
}

Нужно ли мне использовать std :: setw ?

Редактировать 1:
Я использую Visual Studio 2010 Premium на 64-разрядной платформе Windows 7.

7
задан Thomas Matthews 2 August 2011 в 17:51
поделиться