使用Windows什么会导致Labwindows/CVI C程序讨厌2573号码?
所以我从二进制文件读取一个无符号整型数据值列表。该文件包含多个按顺序列出的数据集。下面就来读取一个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);
}
//...
}
凡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的世界中并非如此有才华,这可能对我来说是完全不透明的。
好点(做得好 - 为了让它达到15个字符!) – 2009-10-21 22:13:17
谢谢你,先生,我明白我的方式错误(是的,我忘了“b”)。 – 2009-10-21 22:20:34
我以前常常忘记了“b”,并认出了症状。 – 2009-10-21 22:33:17