奇怪的0x0D被添加到我的二进制文件中

M.N*_*M.N 14 c binary file

我有这个奇怪的问题:

我写了16个字符到一个二进制文件然后我写了3个整数但是当我用一些二进制文件查看器打开我的文件时,我看到一个额外的字节被添加(等于0x0D).

这是我的代码:

for(i = 0; i < 16; i++)
{
    if(i < strlen(inputStr))
    {
        myCharBuf[0] = inputStr[i];
    }
    else
    {
        myCharBuf[0] = 0;
    }

    fwrite(myCharBuf, sizeof(char), 1, myFile);
}

myIntBuf[0] = inputNumber1;

fwrite(myIntBuf, sizeof(int), 1 ,myFile);

myIntBuf[0] = inputNumber2;

fwrite(myIntBuf, sizeof(int), 1 ,myFile);

myIntBuf[0] = inputNumber3;

fwrite(myIntBuf, sizeof(int), 1 ,myFile);
Run Code Online (Sandbox Code Playgroud)

我得到以下字节值:

61 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0D 0 00 00 00 00 00 00 00 08 00 00 00

当我期待:

61 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0A 00 00 00 05 00 00 00 08 00 00 00

有谁知道为什么会发生这种情况?

Jef*_*ter 17

0A是换行符,0D是回车符.这些通常与文本模式相关联.

你是否以二进制模式打开文件?(例如fopen("foo.txt", "wb"))

  • 实际上0D是回车,0A是换行 (2认同)

Mit*_*eat 11

当您打开文件时,打开以写为二进制文件"wb":

fopen(filename, "wb");
Run Code Online (Sandbox Code Playgroud)

在文本模式下打开时,会发生Line Feeds(0A)和Carriage Returns(0D)的转换.


pmg*_*pmg 7

fopen 带有"wb"的二进制模式的文件.

fopen(filename, "wb");
Run Code Online (Sandbox Code Playgroud)

否则,库中的代码将执行自动行结束翻译(在Windows 上的Windows上,不是吗?这意味着转换'\n''\r' '\n').