我可以相对清楚地告诉我现在正在与之抗争。
我正在尝试用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的大小是什么,所以请不要用固定矢量建议任何东西。这就是我被困住的地方。
答案 0 :(得分:4)
您的VB6 Integer
是16位字。在某些平台上使用int16_t
(或short int
,包括你的:)在C ++中使用相同的东西。
答案 1 :(得分:2)
查看数字的大小,您将16位数字读入32位字段。将您的数据类型定义为short int
并相应地修改您的代码。