Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从bin文件-c+;读取十六进制数,每字符2位+; 我正在编写一个C++程序来读取bin文件。二进制文件有以下示例内容: 10 00 01 02 20 03 04 40 50 ....._C++_Hex_Binaryfiles_Bitset - Fatal编程技术网

从bin文件-c+;读取十六进制数,每字符2位+; 我正在编写一个C++程序来读取bin文件。二进制文件有以下示例内容: 10 00 01 02 20 03 04 40 50 .....

从bin文件-c+;读取十六进制数,每字符2位+; 我正在编写一个C++程序来读取bin文件。二进制文件有以下示例内容: 10 00 01 02 20 03 04 40 50 .....,c++,hex,binaryfiles,bitset,C++,Hex,Binaryfiles,Bitset,这里的问题是,通过使用从bin文件正常读取,字节10、40、50被正确读取。但是如果是00,01,02,03。。。。它们分别被读取为0、1、2、3 但是我希望单个字节00 01 02 03等也被读取为00 01 02 03等**。原因是,我正在尝试将值转换为二进制。所以我想得到**“10 00 01 02”的二进制等价物,它是100000000000000000100000010。但是由于内容被解释为10012,因此我得到了10000000000010010。请帮我解决这个问题。抱歉,如果内容太

这里的问题是,通过使用从bin文件正常读取,字节10、40、50被正确读取。但是如果是00,01,02,03。。。。它们分别被读取为0、1、2、3

但是我希望单个字节00 01 02 03等也被读取为00 01 02 03等**。原因是,我正在尝试将值转换为二进制。所以我想得到**“10 00 01 02”的二进制等价物,它是100000000000000000100000010。但是由于内容被解释为10012,因此我得到了10000000000010010。请帮我解决这个问题。抱歉,如果内容太长。提前谢谢

我使用了以下代码简化

fstream fp;
fp.open(binFile, ios::binary | ios::in);
char * buffer = new char[4];
// read data as a block:
fp.read(buffer, 4);
// copied the contents of buffer[] to a string str
stringstream ss;
for (std::string::iterator it = str.begin(); it != str.end(); ++it)
{
    ss << std::hex << unsigned(*it);
}
ss >> intvalue; // stores the converted hex value 
string binstring = bitset<32>(intvalue).to_string();
cout<<binstring // produces wrong value. 
fstream-fp;
fp.open(binFile,ios::binary | ios::in);
char*buffer=新字符[4];
//将数据作为块读取:
fp.read(缓冲区,4);
//已将缓冲区[]的内容复制到字符串str
细流ss;
对于(std::string::iterator it=str.begin();it!=str.end();++it)
{
ss intvalue;//存储转换后的十六进制值
string binstring=位集(intvalue).to_string();

cout从单个字节到更大类型的整数的转换通常使用位移位完成

unsigned char * buffer = new unsigned char[4];
fp.read(buffer, 4);
uint32_t result =  buffer[0] << 24 | buffer[1] << 16 | buffer[2] << 8 | buffer[3];

或者再次使用上面的
结果

std::cout << bitset<32>(result).to_string();

std::cout从单个字节到更大类型的整数的转换通常使用位移位完成

unsigned char * buffer = new unsigned char[4];
fp.read(buffer, 4);
uint32_t result =  buffer[0] << 24 | buffer[1] << 16 | buffer[2] << 8 | buffer[3];

或者再次使用上面的
结果

std::cout << bitset<32>(result).to_string();

std::cout什么是
temp
?什么是
hex
?请提供查看(setfill)
00 01 02 03
到底是如何让你“想要”得到与
10 00 01 02
等价的二进制数的?这是你的“垃圾箱”中的第一行十六进制八位组吗文件,或者是实际的ascii字符?不会粉饰它;您的帖子不清楚。在内存01和1中,您的问题不是在读取时,而是当您打印它时需要两位六进制数字吗?
它们被读取为0、1、2、3
是否
1
不等于
01
?什么是
temp
?什么是
他x
?请提供查看(setfill)如何
00 01 02 03
导致您“想要”获得二进制等价物
10 00 01 02
?,以及第一行十六进制八位字节是从您的“垃圾桶”中取出来的吗文件,或者是实际的ascii字符?不会粉饰它;您的帖子不清楚。在内存中01和1是同一个数字,您的问题不是在读取时,而是在打印时需要两个十六进制数字吗?
它们被读取为0、1、2、3
is
1
不等于
01
?非常感谢。非常有效。+1用于ne在和清楚的解释。无法在帖子中给出+1。非常感谢。它很有效。+1用于简洁和清楚的解释。无法在帖子中给出+1。谢谢
std::cout << bitset<32>(result).to_string();