首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是什么导致Labwindows/CVI程序讨厌数字2573?

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

Stack Overflow用户
提问于 2009-10-22 06:05:54
回答 2查看 1.2K关注 0票数 3

使用Windows

所以我从一个二进制文件中读取了一个无符号int数据值的列表。该文件包含多个按顺序列出的数据集。下面是从char*中读取单个数据集的函数,指向该数据集的开头:

代码语言:javascript
复制
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在这样的上下文中:

代码语言:javascript
复制
//...
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。突然,它开始吐出随机和巨大的数字。

例如,应该是什么?

代码语言:javascript
复制
...
1831
2229
2406
2637
2609
2573
2523
2247
...

变成了

代码语言:javascript
复制
...
1831
2229
2406
2637
2609
0xDB00000A
0xC7000009
0xB2000008
...

如果你觉得那些十六进制数字看起来可疑,那你说对了。事实证明,更改后的值的十六进制值非常熟悉:

代码语言:javascript
复制
2573 -> 0xA0D
2523 -> 0x9DB
2247 -> 0x8C7

显然,这个数字2573导致我的流指针获得一个字节。这将一直保留到下一个数据集被加载和解析,上帝不允许它包含数字2573。我检查了许多发生这种情况的地点,我检查过的每个地点都是从2573开始的。

我承认我在C的世界里并不是那么有才华,是什么导致了这一切,这对我来说是完全不透明的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-10-22 06:12:08

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

票数 11
EN

Stack Overflow用户

发布于 2009-10-22 06:09:07

有几个不相关的问题。

sizeof(*dataset)并不像你想的那样。

不需要在每次读取时使用寻道

我不明白你是如何调用一个只接受一个参数的函数,却给了它两个参数(或者至少我不明白为什么你的编译器不反对)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1603934

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档