我一直试图读取一个小端二进制文件。我希望首先找到一个字符串的文件中的索引,从那里我可以开始阅读数据。一旦我得到的索引,我将期待提取学生信息。我已经成功地在阅读字符串(名字和姓氏)。然而,我无法提取整数(年龄)。我感谢您的帮助:)下面是二进制文件中学生信息部分的示例
130000004A4F484E444F45
个字符
我的代码的输出将是:
The student name is: John Doe, they are **(some character)** years old
型
预期产出应为:
The student name is: John Doe, they are 19 years old
型
年龄数据看起来像:二进制文件中的13 00 00 00应该转换为19,因为这是小端。
任何帮助将不胜感激。谢谢!
3条答案
按热度按时间bzzcjhmw1#
一条捷径
我假设(在我看来,这是很安全的)学生的年龄是一个小于255的正数,所以它适合一个字节。
只要读那个字节。
xoefb8l82#
一种便携式的方式来读取2的补码架构(这是几乎每一个现代计算机)的小端。
从字符缓冲区中读取4个字节:
13 00 00 00
,如下所示。字符串
如果你使用的是Intel处理器,那么你可能已经完成了。由于Intel处理器是小端字节序。
age
将具有期望值。或者在本例中,0x 13 ==十进制19。如果你想让你的代码在big-endian和little-endian硬件上运行,你可以这样做:
型
其中
isBigEndian()
可以写成如下:型
c86crjj03#
下面是转换整数的代码,与系统无关:
字符串
您可以使用
string
中的示例二进制数据调用此函数:型
我已经展示了一个泛型函数,而不是一个只接受3个字节的函数,以防其他大小的字符串也被使用。如果你想有一个更小的整数,你可以检查整数是否低于一定的大小,然后赋值。