我目前面臨一個我不知道如何避免它的問題。
我嘗試處理可以是大端或小端的數據。這不是一個真正的問題,因爲它總是以一個頭文件開始,所以我可以檢查我必須使用哪種endian模式,但是在解碼值時,有一些操作我不知道如何實現大端數據。
該代碼在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差異,而不是恢復兩個操作數以及結果?
最好的問候, 托比亞斯
我認爲你應該在需要時真的交換字節,所以當輸入的數據有不同的endiannes比你的機器。 – piokuc
您期望的結果是什麼?你想保留大的字節序,還是想轉換成小字節序? – gaborsch
只有當字節被交換爲PRIOR以後才能正確添加(如果它們是以big endian的形式進入你的小端機器的話)。只有在絕對不需要從字節到字節的極低概率情況下,這種工作在加法之前不進行字節交換。 – trumpetlicks