在CAPL代码中,我有一个"字节[]"数组,此数组应该保持" hex"值(00..ff(。
问题是,当我尝试将"十六进制"数组保存到" ASCII"格式的文件中时,它完全忽略了" 00"(这是" null"字符(,从而导致输出文件损坏。<<<<<<<<<<<<<</p>
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"。L:角色" L"。NUL:" null"控制字符。SOH:"启动标题"控制字符。STX:"启动文本"控制字符。
请帮助我任何解决方案或解决方法。
非常感谢。
我找到了答案:)
简单地,不要以" ASCII"模式写入,也不要使用将"二进制数据"解释为" ASCII数据"(字符(的" snprintf(("。
新代码:
void ExportBinaryFile(void)
{
FileHandle = OpenFileWrite(FileName, 1);
fileWriteBinaryBlock(UploadedData, elcount(UploadedData), FileHandle);
fileClose(FileHandle);
}