0

在 CAPL 代码中,我有一个“byte[]”数组,这个数组应该保存“Hex”值(00..FF)。

问题是,当我尝试将“Hex”数组保存到“ASCII”格式的文件中时,它会完全忽略“00”(即“NULL”字符),从而导致输出文件损坏。

variables
{
    byte UploadedData[56, 41, 4C, 00, 01, 02, 00, 02];
    char ExportedTextFile[9];
    char FileName[32] = "FlasherImage.can";
    dword FileHandle = 0;
}

void ExportDataFile(void)
{  
    int u16Index = 0;


    FileHandle = OpenFileWrite(FileName, 0);  

    for (u16Index = 0; u16Index < 8; u16Index++)
    { 
        snprintf(ExportedTextFile, elcount(ExportedTextFile), "%c", UploadedData[u16Index]);

        filePutString(ExportedTextFile, elcount(ExportedTextFile), FileHandle);
    }

    fileClose(FileHandle);
}

预期文件应为:VALNULSOHSTXNULSTX

获得的文件是(“NUL”被忽略):VALSOHSTXSTX

其中: V:字符“V”。A:字符'A'。L:字符“L”。NUL:“NULL”控制字符。SOH:“标题开头”控制字符。STX:“文本开头”控制字符。

请帮助我解决任何解决方案或解决方法。

非常感谢。

4

1 回答 1

0

我找到了答案:)

简单地说,不要以“ASCII”模式编写,也不要使用将“二进制数据”解释为“ASCII 数据”(字符)的“snprintf()”。

新代码:

void ExportBinaryFile(void)
{    
  FileHandle = OpenFileWrite(FileName, 1); 
  fileWriteBinaryBlock(UploadedData, elcount(UploadedData), FileHandle);
  fileClose(FileHandle);
}
于 2019-05-18T10:07:09.600 回答