gpt4 book ai didi

C:从二进制文件中读取的 unsigned short 与原始模式不匹配后存储到缓冲区中

转载 作者:行者123 更新时间:2023-12-04 10:55:14 25 4
gpt4 key购买 nike

我有一个二进制文件,其中填充了遵循这种模式(十六进制)的 2 字节字:0XY0。这是我执行 fread 和 fopen 的代码部分。

unsigned short buffer[bufferSize]; 
FILE *ptr; //

ptr = fopen(fileIn,"rb"); //

if(ptr == NULL)
{
fprintf(stderr,"Unable to read from file %s because of %s",fileIn,strerror(errno));
exit(20);
}

size_t readed = fread(buffer,(size_t)sizeof(unsigned short),bufferSize,ptr);
if(readed!=bufferSize)
{
printf("readed and buffersize are not the same\n");
exit(100);
}
//---------------------------

如果我查看缓冲区的任何内容,例如 buffer[0],而不是带有模式 0XY0 的短裤,它是带有模式 Y00X 的短裤我的错误在哪里?是关于字节顺序的吗? 当然,我检查了缓冲区内的每个元素。程序执行没有错误。

编辑:如果我从大小为 char 而不是 short 的文件中读取,缓冲区的内容(显然更改为 char buffer[bufferSize*2];)与模式 OXYO 匹配。所以我有(例如)buffer[0] 是 0X,buffer[1] 是 Y0

最佳答案

您的问题似乎是将数据存储到文件的程序与读取它的程序之间字节顺序不匹配的典型问题。请记住,手机处理器倾向于使用大端表示法和笔记本电脑小端法。

另一个可能的解释是,您的文件可能是由基于 Windows 的程序以文本模式编写的,该程序将 0x0A 字节转换为成对的 0x0D/0x0A,导致内容发生变化并导致与您观察到的模式类似的模式。

与其使用 fread 读取文件,不如逐字节读取文件,并根据为文件格式指定的字节序计算值。

关于C:从二进制文件中读取的 unsigned short 与原始模式不匹配后存储到缓冲区中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50555314/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com