gpt4 book ai didi

c - 是什么导致 Labwindows/CVI C 程序讨厌数字 2573?

转载 作者:太空狗 更新时间:2023-10-29 15:51:32 24 4
gpt4 key购买 nike

使用 Windows

所以我正在从一个二进制文件中读取一个无符号整型数据值的列表。该文件包含许多按顺序列出的数据集。这是从指向其开头的 char* 读取单个数据集的函数:

function read_dataset(char* stream, t_dataset *dataset){

//...some init, including setting dataset->size;

for(i=0;i<dataset->size;i++){
dataset->samples[i] = *((unsigned int *) stream);
stream += sizeof(unsigned int);
}
//...
}

where read_dataset 在这样的上下文中:

//...
char buff[10000];
t_dataset* dataset = malloc( sizeof( *dataset) );
unsigned long offset = 0;

for(i=0;i<number_of_datasets; i++){

fseek(fd_in, offset, SEEK_SET);

if( (n = fread(buff, sizeof(char), sizeof(*dataset), fd_in)) != sizeof(*dataset) ){
break;
}

read_dataset(buff, *dataset);

// Do something with dataset here. It's screwed up before this, I checked.


offset += profileSize;
}
//...

一切顺利,直到我的循环读取到数字 2573。突然之间,它开始吐出随机的巨大数字。

例如,应该是什么

...
1831
2229
2406
2637
2609
2573
2523
2247
...

成为

...
1831
2229
2406
2637
2609
0xDB00000A
0xC7000009
0xB2000008
...

如果您认为这些十六进制数字看起来很可疑,那您是对的。原来更改值的十六进制值真的很熟悉:

2573 -> 0xA0D
2523 -> 0x9DB
2247 -> 0x8C7

很明显,这个数字 2573 使我的流指针获得了一个字节。这将一直保留到下一个数据集被加载和解析,上帝禁止它包含数字 2573。我已经检查了很多发生这种情况的点,我检查过的每个点都从 2573 开始。

我承认我在 C 的世界里不是那么有天赋。是什么导致了这对我来说是完全和完全不透明的。

最佳答案

您没有指定如何获取内存中的字节(由流指向),也没有指定您在什么平台上运行,但我不会惊讶地发现您在 Windows 上,并且您使用了 C stdio库调用 fopen(filename "r"); 尝试使用 fopen(filename, "rb");。在 Windows(和 MS-DOS)上,fopen() 将文件中的 MS-DOS 行结尾“\r\n”(十六进制 0x0D 0x0A)转换为 Unix 样式“\n”,除非您将“b”附加到文件模式表示二进制。

关于c - 是什么导致 Labwindows/CVI C 程序讨厌数字 2573?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1603934/

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