2
我需要把8個字節,我在我的代碼運行的任意機器上收到,在大端排序。我相信我可以使用htobe64
函數,但在編譯我的代碼時,我不確定在不同的機器體系結構和操作系統上的可移植性 - 即endian.h
的可用性。這是一種安全的便攜式使用方法,還是使用不同的方法更好?htobe64和endian.h的可移植性
我需要把8個字節,我在我的代碼運行的任意機器上收到,在大端排序。我相信我可以使用htobe64
函數,但在編譯我的代碼時,我不確定在不同的機器體系結構和操作系統上的可移植性 - 即endian.h
的可用性。這是一種安全的便攜式使用方法,還是使用不同的方法更好?htobe64和endian.h的可移植性
請使用下面的,便攜的方法:
#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;
}
好,謝謝,這解決了我的問題;但是,如果將來需要交換不同的字節序列呢?我會最終包括這樣的幾個功能嗎?我想我的問題基本上是關於'endian.h'本身的可移植性。 – user4416936
@ user4416936'endian.h'不是可移植的,在數字變量中保留「endianed」數字通常是一個壞主意。使用一堆功能,如上面的功能。 – fuz