3 回答

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超5個(gè)贊
unsigned short _byteswap_ushort(unsigned short value);
unsigned long _byteswap_ulong(unsigned long value);
unsigned __int64 _byteswap_uint64(unsigned __int64 value);
int32_t __builtin_bswap32 (int32_t x)int64_t __builtin_bswap64 (int64_t x)

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超7個(gè)贊
#include <climits>template <typename T>T swap_endian(T u){ static_assert (CHAR_BIT == 8, "CHAR_BIT != 8"); union { T u; unsigned char u8[sizeof(T)]; } source, dest; source.u = u; for (size_t k = 0; k < sizeof(T); k++) dest.u8[k] = source.u8[sizeof(T) - k - 1]; return dest.u;}
swap_endian<uint32_t>(42)
.

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超10個(gè)贊
假設(shè)您的數(shù)據(jù)流有一個(gè)端編碼的32位整數(shù)。下面是如何提取它(假設(shè)沒有簽名的字節(jié)):
i = (data[0]<<0) | (data[1]<<8) | (data[2]<<16) | (data[3]<<24);
如果它是大端,下面是如何提取它:
i = (data[3]<<0) | (data[2]<<8) | (data[1]<<16) | (data[0]<<24);
TL;DR:
data
unsigned char
uint8_t
signed char
char
data[x]
data[x] << 24
- 3 回答
- 0 關(guān)注
- 1898 瀏覽
添加回答
舉報(bào)