混乱しています - 私たちはオクテットストリームバイナリファイルを処理しようとしています。さまざまな可能な宛先構造体があります。入ってくるファイルは、最初にバイト配列に変換する必要があることが分かっているxバイトの文字列(blob)です。 FORループを使用して、一度にバイトをバイト配列に移動します。次に、データ内の固定位置のテキストフィールドで定義されているように、データの特定の構造体を認識すると、その構造体に固有の逆直列化ルーチンが使用されます。文字配列は、文字列変数を格納するために1つのdeserialize関数を使用し、受け取ったデータを介して整数フィールドに他の変数(通常はUINT16)などを設定します。下位整数のバイト8が負に設定されている場合、int16(2バイト整数)処理が失敗することがわかります。ブロブは、FORループを使用してバイト配列に移動された後までFORループの8ビット整数、文字、または何であるのかどうかもわかりません(特定のビットが設定されていると整数変換が失敗します
標準for (i=1, I <= blob_length, i++)
{dest(i) = source(i); }
)、我々は持っていますどの構造体が有効であるかを特定する。私たちはデシリアライズを出る頃には
は、我々は次のようにデータが破損している参照してください。
ので、小数点以下511人のバイナリ01 11111111改宗は256バイナリ01 00000000
が、10進数10進383 01進01111111が正しく
変換します上位ビットがオンの場合、またはUINT16の実際のデシリアライズ処理が失敗した場合、FORループ処理が何らかの形で8ビットフィールドを処理できないかどうかはわかりません。私たちは、8番目のビットが処理を壊す他のASCII関連の問題を解決するために苦労しました。これがまだ別のものか、それが他のものかどうかはわかりません。
洞察力や指導に感謝します。
関連するコードセグメントを掲載することはできますか? –
表示している小さなコードセグメントはコンパイルされず、byte []から他のタイプへの変換も表示されません。だから、伝えるのは本当に難しいです。実際に関連している**実際の**コードを表示してコンパイルしてください! –
'dest'と' source'タイプは何ですか?配列の場合は、 '(i)'の代わりに '[i]'を使うべきです。そして、あなたのコードは、 'source'を' dest'にコピーするだけでなく、多くの仕事をするようには思えません。 –