我必须做的是以二进制模式打开一个文件,该文件包含旨在被解释为整数的存储数据。我见过其他例子,如Stackoverflow-Reading “integer” size bytes from a char* array.,但我想尝试采取不同的方法(我可能只是固执或愚蠢:/)。我首先在十六进制编辑器中创建了一个简单的二进制文件,其内容如下。在C++中使用按位运算符将4个字符更改为int
00 00 00 47 00 00 00 17 00 00 00 41
如果12个字节被分成3个整数,这个(应该)等于71,23和65。
以二进制模式打开此文件并将4个字节读入一个字符数组后,如何使用按位操作使char [0]位成为int的前8位,依此类推,直到每个位char是int的一部分。
My integer = 00 00 00 00
+ ^ ^ ^ ^
Chars Char[0] Char[1] Char[2] Char[3]
00 00 00 47
So my integer(hex) = 00 00 00 47 = numerical value of 71
此外,我不知道我的系统的字节顺序是如何进入这里的,所以有什么我需要记住的吗?
这里是我到目前为止的代码片断,我只是不知道下一步要采取的步骤。
std::fstream myfile;
myfile.open("C:\\Users\\Jacob\\Desktop\\hextest.txt", std::ios::in | std::ios::out | std::ios::binary);
if(myfile.is_open() == false)
{
std::cout << "Error" << std::endl;
}
char* mychar;
std::cout << myfile.is_open() << std::endl;
mychar = new char[4];
myfile.read(mychar, 4);
我最终在处理阅读计划从一个文件中,也许一个自定义数据类型的最终浮动,但首先我需要得到更多熟悉如何使用按位运算。 谢谢。
固执之外,你可以做到这一点通过读取int和再用ntohl使用() – 2011-03-17 02:43:13
你的二进制文件是“big-endian”。所以只要你用big-endian的方式将它的字节转换为整数,你不需要担心计算机的字节序。 – aschepler 2011-03-17 02:44:16
...直到您将您的代码移动到不同的系统,并尝试从大端系统读取数据。那么你会遇到问题。 – Thomi 2011-03-17 02:48:06