Tôi đang tìm một phương pháp đơn giản để đọc giá trị hex từ tệp văn bản bằng cách sử dụng luồng. Tôi đã tìm kiếm Stack Overflow bằng cách sử dụng "C++ hex read stream 0x" và hầu hết các câu trả lời là viết hex dưới dạng văn bản hoặc đọc trong giá trị hex mà không có tiền tố "0x". Câu hỏi này là về việc đọc số hex, với tiền tố "0x" làm số trong một thao tác.Đọc định dạng văn bản hex 0x từ luồng
phương pháp của tôi:
unsigned char byte;
std::istringstream sample("0xce");
sample >> std::hex >> byte;
kết thúc với byte
chứa '0' (0x30) từ ký tự đầu tiên.
Chức năng 'strtol` xử lý chuyển đổi, nhưng yêu cầu phải đọc dữ liệu, chuyển đổi thành chuỗi kiểu C.
Tôi đang quá tải operator>>
trong một lớp học để đọc tệp văn bản có giá trị được phân tách bằng dấu phẩy (CSV). Dưới đây là một mẫu của các tập tin dữ liệu:
1,-4.93994892,0xa5,8,115.313e+3,
2,-4.93986238,0xc0,8,114.711e+3,
3,-4.93977554,0xc2,8,114.677e+3,
phương pháp khai thác của tôi:
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;
}
Tôi có cần phải sử dụng std::setw
?
Chỉnh sửa 1:
Tôi đang sử dụng Visual Studio 2010 Premium trên Windows 7, nền tảng 64 bit.
bạn có thể tự khắc phục sự cố khi phân tích cú pháp cvs và sử dụng trình tạo phân tích cú pháp sẵn sàng đủ linh hoạt để xử lý tất cả các trường hợp (bao gồm unicode): http://tinyurl.com/3zs2o6k –
@Gene Bushuyev: Cảm ơn lời đề nghị. Tôi luôn nghĩ rằng các trình phân tích cú pháp quá tải đối với các tệp CSV đơn giản. Tôi sẽ sử dụng một trình phân tích cú pháp nếu có một ngôn ngữ liên quan, hoặc một giao thức phức tạp. Chương trình này là một phân tích nhỏ và tôi nghĩ rằng một trình phân tích cú pháp sẽ làm cho chương trình quá phức tạp. –
Liên quan, hãy xem [Chuyển đổi chuỗi thập lục phân có chữ “0x” thành chữ viết tắt trong C++?] (Http://stackoverflow.com/q/1487440/608639) – jww