2015-01-04 77 views
2

我需要把8個字節,我在我的代碼運行的任意機器上收到,在大端排序。我相信我可以使用htobe64函數,但在編譯我的代碼時,我不確定在不同的機器體系結構和操作系統上的可移植性 - 即endian.h的可用性。這是一種安全的便攜式使用方法,還是使用不同的方法更好?htobe64和endian.h的可移植性

回答

2

請使用下面的,便攜的方法:

#include <stdint.h> 

void write64be(unsigned char out[8], uint64_t in) 
{ 
    out[0] = in >> 56 & 0xff; 
    out[1] = in >> 48 & 0xff; 
    out[2] = in >> 40 & 0xff; 
    out[3] = in >> 32 & 0xff; 
    out[4] = in >> 24 & 0xff; 
    out[5] = in >> 16 & 0xff; 
    out[6] = in >> 8 & 0xff; 
    out[7] = in >> 0 & 0xff; 
} 
+0

好,謝謝,這解決了我的問題;但是,如果將來需要交換不同的字節序列呢?我會最終包括這樣的幾個功能嗎?我想我的問題基本上是關於'endian.h'本身的可移植性。 – user4416936

+0

@ user4416936'endian.h'不是可移植的,在數字變量中保留「endianed」數字通常是一個壞主意。使用一堆功能,如上面的功能。 – fuz