当前位置: 首页 > 知识库问答 >
问题:

将int写入二进制文件

刘选
2023-03-14

我想以这种形式将短int x=0x4740写入二进制文件:0100 0000 0100 0111,当我在记事本中打开它时,它是@G。它正在工作。当我尝试编写例如短int a=0xf0ff;(二进制:1111 0000 1111 1111)时,记事本显示给我的不是我的数字二进制(➕是1100 1011 1001 1001 1100 0100 1001 0001)。如何在这个文件中编写它并获得1111 0000 1111 1111?

我正在使用此转换器:http://www.binaryhexconverter.com/binary-to-ascii-text-converter

int main() {

ofstream plik;
plik.open("D:\\book.dat", ios::binary);
if (!plik.good()) cout << "error";

short int x = 0xf0ff;

plik.write(reinterpret_cast<char*>(&x), 2);
plik.close();

system("pause");
return 0;
}    

共有2个答案

汪飞捷
2023-03-14

您的代码没问题。然而,使用记事本对二进制数据的解释并非如此。简而言之,在使用记事本查看文件时,不应将 Unicode 值用于非 ASCII 字符(如 đ)。

记事本以 8 位编码读取文件,使用(可能)在 Windows 区域和语言设置中配置的非 Unicode 程序的代码页。

现在,在windows-1250中(我猜这是在您的语言环境中配置的),ddo有代码0xf0,而˙有代码0xff。所以文件内容是0xff 0xf0,这正是您所期望的。

我建议使用一些更高级的工具来检查二进制文件的内容。

公良渝
2023-03-14

您的代码将正确地将该数字写入该文件,但您必须注意,在当今的大多数架构中,数字都存储在Little Endian中。

也就是说,short int x=0xf0ff 0xff0xf0,而不是您可能预期的0xf00xff

如果您尝试使用十六进制编辑器打开文本文件,那么它确实包含0xff 0xf0。这相当于二进制格式的11111111110000(而不是1111 0000 1111111)。

然后,文本编辑器将0xff 0xf0解释为•。

< br >现在,如果您想在文件中写入< code>1111 0000 1111 1111,您必须“反向”写入数字或直接使用char数组:

短整数x=0xfff0char plik[]={0xf0,0xff};

请注意,并非所有架构都是小字节序,因此,如果您关心可移植性,建议使用 char 数组。

 类似资料:
  • 问题内容: 我有23位表示为字符串,并且需要将此字符串作为4个字节写入二进制文件。最后一个字节始终为0。以下代码有效(Python 3.3),但感觉不太好(我对Python和编程很陌生)。您有任何改善技巧吗?似乎for循环可能有用,但是如何在循环中进行切片而不出现IndexError?请注意,当我将位提取到一个字节中时,我会反转位顺序。 问题答案: 您可以将其视为int,然后按以下方式创建4个字节

  • 我无法重写从二进制缓冲区获取的文件,我已与原始文件进行了检查,所有字节都相同。 这是从NodeJS创建的文件: 这是最初的一个: 你可以比较这两个文件,每个字节都是一样的,我猜NodeJS的编码不是正确的。 这是一段代码 你可以试着在你的节点上运行它,看看结果是错误的。 我能做些什么来修复它?

  • 我想编程一个16/32位的EEPROM。我正在用C程序编写这个文件,但是似乎只执行8位?我写了一个简单的例子,使用xxd(和hextump)查看结果,但文件似乎只有8位。我想知道是否由于hexdump的限制,我只能看到8位 有人知道我如何检查所有的位都被写入文件吗? 使用xxd我看到: 编辑:我试图确保有32位写入文件。xxd的结果是: 其中显示有16位用于,但其他16位在哪里?理想情况下,我希望

  • 我使用模块连接到返回PNG图像的php脚本。如果我这样做: 但是它在编写时给出了UnicodeEncodeError,所以我使用了而不是。文件已创建,但我无法在图像查看器中查看它(它会出错)。但是,如果我右键单击并在Firefox中保存该脚本返回的PNG,我可以在保存后在同一图像查看器中查看它。所以我猜我将图像数据写入文件的方式有问题。还有别的办法吗?

  • 问题内容: 这一定很明显,但我无法弄清楚。我为此花了将近一整天。我很乐意给减轻我体重的人买啤酒。 这是我的代码。我看到字节数组大小不合适,但是我找不到正确的大小。除此之外,内容也不是不正确的。似乎只有文字字符可以。 似乎从二进制文件中删除数据确实很痛苦,我真的很沮丧。 还有一件事:文件内容不是文本,可以是图片,视频或pdf之类的东西。 问题答案: 如果你正在读一个二进制文件,你应该 不 尝试把它当

  • 问题内容: 输出文件包含: 问题出在哪里?如何使用写入文本文件? 问题答案: 你必须写String … 你可以试试。 要么 要么