0

バイナリ xml からいくつかのフロートを読み取り、それらを 4 つのフロート (正確には 32 ビットのフロート) を含む構造体に逆シリアル化します。-1 の値を除いて、すべての値が正しく読み取られます。

これはエンディアン関連の問題ですか?

-1が変換され0、他のすべての値が正しく逆シリアル化されている場合、何を探す必要がありますか? (つまり、考慮すべき明らかな一般的な間違いまたは間違いの原因はありますか?)。私はこれを行う図書館へのアクセス権を持っておらず、機密であるため詳細を提供することはできません.

この質問が実際にクローズされる前に、ちょっとしたヒントを投稿したいと思います (厳しい NDA 条件のためコードはありません):

  • 私が使用しているライブラリは、一部のバイナリ データを xml から特定の型に変換します
  • これは非常に醜い方法で行われます。

    値 = (T )srcBuffer;

    SwapByte(値);

  • -1したがって、直接読み取られ、BigEndian 形式であると見なされます。残念ながら、これは-1BigEndiansomethingE-47形式では非常に小さい数値です。アセンブリ命令は、いくつかの量子化を実行し、それをゼロに丸めます。したがって、後方SwapByte命令は間違ったデータを取得し、この奇妙なケースでは失敗します。これは、IBM/PowerPC プロセッサに関連するアーキテクチャ上の問題です。

うまくmemcpy機能し、醜い量子化アーティファクトを回避できますか? 確実に他の部品を劣化させてしまうので、変換前のスワップバイトはできません。

4

0 に答える 0