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_tC ++で同じことを取得するには、 (またはshort intあなたのプラットフォームを含む一部のプラットフォームで:)を使用します。

于 2013-01-21T13:14:13.183 に答える
2

数値のサイズを見ると、16ビットの数値を32ビットのフィールドに読み込んでいます。データ型をとして定義し、short intそれに応じてコードを変更します。

于 2013-01-21T13:16:43.490 に答える