从文件中读取整数时的值错误

时间:2013-01-21 13:10:33

标签: c++

几周前我问了一个类似的问题,但我卡住了,并不知道我是否犯了其他错误。

我可以相对清楚地告诉我现在正在与之抗争。

我正在尝试用C ++重写VB6函数。 困难的是这一行:

vector<int>vIntegerValues;

vIntegerValues.resize(iCountIntegers);

fseek(iReadFile, uFromBytePos * sizeof(int), SEEK_CUR);

size_t readElements = fread(&vIntegerValues[0], sizeof(int), iCountIntegers, iReadFile); 

我的VB6版本是这样的:

Dim vIntegerValues() As Integer

ReDim vIntegerValues(0 To iCountIntegers)

Get #iReadFile, uFromBytePos, vIntegerValues()

但是,C ++函数用不符合预期的数据填充整数向量。

例如在VB6中,第一个值是: 0,0,2,2,0,-2,0,-2,0,2,0,0,-2,

在C ++中,第一个值是 131074,-131072,-131072,131072,0,65534

当他看到我哪里出错时,有人可以帮忙吗? 非常感谢你。

ps:我事先并不知道矢量vIntegerValues的大小是什么,所以请不要用固定矢量建议任何东西。这就是我被困住的地方。

2 个答案:

答案 0 :(得分:4)

您的VB6 Integer是16位字。在某些平台上使用int16_t(或short int,包括你的:)在C ++中使用相同的东西。

答案 1 :(得分:2)

查看数字的大小,您将16位数字读入32位字段。将您的数据类型定义为short int并相应地修改您的代码。