0

几周前我问了一个类似的问题,但我被卡住了,我真的不知道我是否没有犯任何其他错误。

我现在可以比较清楚地分辨出我在与什么战斗。

我正在尝试用 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的大小会是多少,所以请不要建议任何带有固定向量的东西。这就是我会卡住的地方。

4

2 回答 2

4

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

于 2013-01-21T13:14:13.183 回答
2

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

于 2013-01-21T13:16:43.490 回答