現在、回避方法がわからない問題に直面しています。
ビッグ エンディアンまたはリトル エンディアンのデータを処理しようとしています。常にヘッダーで始まるため、これは実際には問題ではありません。使用する必要があるエンディアン モードを確認できますが、値のデコード中に、ビッグ エンディアン データの実装方法がわからない操作がいくつかあります。
コードはリトル エンディアン (またはリトル エンディアン モードで実行) の nVidia Tegra (ARMv7 アーキテクチャに基づく Cortex-A9) で実行されますが、ビッグ エンディアン データを取得することがあります。
データに対するほとんどの操作は実際には問題ではありませんが、追加を正しく行う方法がわかりません..
Example: D5 1B EE 96 | 96 EE 1B D5
+ AC 84 F4 D5 | + D5 F4 84 AC
= 1 81 A0 E3 6B | = 1 6C E2 A0 81
ご覧のとおり、ほとんどのバイトは結果で既に正しいですが、一部は正しくありません。加算は常に右から左 (リトル エンディアン マシン) に行われるため、予想される結果とは +1 または -1 だけ異なります。
このリトル エンディアン マシンでのビッグ エンディアンの加算の場合、左から右に加算し、キャリー (ある場合) を右に取る必要があります。
私の質問は、正しい結果を得る可能性があるかどうかです(おそらくプロセッサに特別な命令を使用していますか?)。両方のオペランドと結果を元に戻すよりも「安価な」これらの +1/-1 の違いを取り除くために、結果に対して実行できる操作がさらにあるのではないでしょうか?
よろしく、 トバイアス