Я ищу простой метод для чтения шестнадцатеричного значения из текстового файла с использованием потоков. Я искал переполнение стека, используя «C ++ hex read stream 0x», и большинство ответов касалось записи hex в виде текста или чтения в шестнадцатеричных значениях без префикса «0x». Этот вопрос касается чтения шестнадцатеричного числа с префиксом «0x» в качестве числа в одной операции.
Мой метод:
unsigned char byte;
std::istringstream sample("0xce");
sample >> std::hex >> byte;
Заканчивается byte
, содержащим '0' (0x30) от первого символа.
Функция 'strtol` обрабатывает преобразование, но требует чтения данных, преобразования в строку в стиле C.
Я перегружаю operator>>
в классе, чтобы прочитать текстовый файл с разделителями-запятыми (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 на Windows 7, 64-битная платформа.