所以我需要一些帮助,我现在有一个文本文件,其中包含以下数据:
myfile.txt
-----------
b801000000
我想要做的是将b801等数据读取为位,这样我就可以得到
的值0xb8 0x01 0x00 0x00 0x00.
当前我正在使用以下typedef将该行读入无符号字符串。
typedef std::basic_string <unsigned char> ustring;
ustring blah = reinterpret_cast<const unsigned char*>(buffer[1].c_str());
我继续摔倒的地方现在试图让每个char {'b','8'等等......真的变成{'0xb8','0x01'等......}
感谢任何帮助。
感谢。
答案 0 :(得分:1)
我看到两种方式:
以std::ios::binary
打开文件,并使用std::ifstream::operator>>
在使用标志std::ios_base::hex
后提取十六进制双字节并提取到两个字节大的类型(如{{ 1}}(C ++ 0x / C99)uint16_t或等价物)。有关使用stdint.h
的示例,请参阅@ neuro对您的问题的评论。 std::stringstream
几乎完全相同。
直接访问流迭代器并手动执行转换。更难,更容易出错,也不一定更快,但仍然很有可能。
答案 1 :(得分:0)
strtol将字符串(需要一个空终止的C字符串)转换为具有指定基数的int
答案 2 :(得分:0)
一种肮脏的方式:
#include <stdio.h>
int main ()
{
int num;
char* value = "b801000000";
while (*value) {
sscanf (value, "%2x", &num);
printf ("New number: %d\n", num);
value += 2;
}
return 0;
}
运行这个,我得到:
New number: 184
New number: 1
New number: 0
New number: 0
New number: 0