2011-09-22 72 views
1

看到小尾數以大端

我已經寫了一個庫(little endian機)工作在小端機器罰款現在我當我big endian平臺,它不工作 .error是運行很難理解。 現在我已經明白的endianess但還是我沒有得到這個概念......

i want to know for making ma library for `big-endian` which changes should i 
take care in ma code? 

我婉知道哪些操作確實有在這兩個尾數

+0

可能需要提供更多關於您在圖書館中做什麼的信息。例如,任何網絡通信都會對小端/大端產生衝突 – Matthew

+0

不,我不會做任何網絡通信的東西... –

+0

您是否期待我們猜測,直到您說「是的,我正在做這個」?你的圖書館在做什麼?你得到的錯誤是什麼?你到目前爲止找到哪些錯誤來源? – Secure

回答

6

許多事情不同的行爲可能需要改變(很難給出一個全面的清單:「這是什麼可能出錯」)。

當試圖直接訪問整數內存的內容時(例如使用memcpy例如union技巧等),通常會出現字節順序問題。

+2

不要忘記移位操作,指針算術,類型轉換等等。但是,如果沒有他告訴我們的話,你是正確的方式太多的問題來猜測他的特定問題可能是什麼。 –

+1

@JesusRamos - 錯誤。您提到的操作都是endian安全的,禁止*指針*轉換。移位:對於任何非溢出的正數'n',(n >> 1) Unsigned

0

您的圖書館是否使用二進制數據文件?

使用二進制文件時,您必須注意您正在編寫/讀取數據的格式(大小寫)。例如,當向文件寫入一個整數數組時,它們將被存儲在執行寫入的機器中。閱讀時,必須考慮到這種情況並在必要時轉換數據。

1

要指定問題cnicutar提到,一個典型的候選問題是當你直接訪問一個不同類型的數組類型的部分,而不是使用計算訪問。

unsigned long int a = 0x04030201ul; 

/* Directly accesses the representation, gives 2 on LE and 3 on BE */ 
b = ((unsigned char *)&a)[1]; 

/* Works with the values, always gives 2 */ 
b = (a >> 8) & 0xff;