I am looking for a simple method to read a hex value from a text file using streams. I searched Stack Overflow using "C ++ hex read stream 0x" and most of the answers concerned writing hexadecimal text or reading in hexadecimal values ββwithout the "0x" prefix. This question is to read the hexadecimal number with the prefix "0x" as a number in one operation.
My method:
unsigned char byte; std::istringstream sample("0xce"); sample >> std::hex >> byte;
Ends with a byte containing '0' (0x30) from the first character.
The strtol function handles the conversion, but requires reading data, converting to a C-style string.
I overload operator>> in a class to read a delimited text file (CSV). Here is an example data file:
1,-4.93994892,0xa5,8,115.313e+3, 2,-4.93986238,0xc0,8,114.711e+3, 3,-4.93977554,0xc2,8,114.677e+3,
My extraction method:
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; }
Do I need to use std::setw ?
Change 1:
I am using Visual Studio 2010 Premium on a Windows 7 platform, 64-bit version.