static void flv_put_double(double d,FILE * flv) { //把 double 的位置按照大端就可以了 uint64_t * t = (uint64_t*)&d; uint64_t n = __bswap_64(*t); fwrite(&n,8,1,flv); }
TC_PackIn::TC_PackInInner& TC_PackIn::TC_PackInInner::operator << (long long t) { #if __BYTE_ORDER == __LITTLE_ENDIAN t = __bswap_64(t); #endif _buffer.append((const char *)&t, sizeof(long long)); return *this; }
uint64_t little_endian_chg64(uint64_t n) { #if BYTE_ORDER == BIG_ENDIAN return __bswap_64(n); #elif BYTE_ORDER == LITTLE_ENDIAN return n; #else # error "What kind of system is this?" #endif }
TC_PackIn::TC_PackInInner& TC_PackIn::TC_PackInInner::operator << (unsigned long t) { if(sizeof(unsigned long) == 8) { #if __BYTE_ORDER == __LITTLE_ENDIAN t = __bswap_64(t); #endif } else { t = htonl(t); } _buffer.append((const char *)&t, sizeof(unsigned long)); return *this; }
uint64_t get_int64(buffer *b) { uint64_t res; Assert(b->ptr + sizeof(uint64_t) <= b->fill_size); res = *((uint64_t*) BUFFER_POS(b)); b->ptr += sizeof(uint64_t); #if __BYTE_ORDER == __LITTLE_ENDIAN return __bswap_64(res); #elif __BYTE_ORDER == __BIG_ENDIAN return res; #else #error __BYTE_ORDER not specified! #endif }
int64_t ns_csi64(int64_t n) { if(ns_isne()) return n; return __bswap_64(n); }
inline UInt64 ntoh64(UInt64 v) { return __bswap_64(v); }
inline UInt64 hton64(UInt64 v) { return __bswap_64(v); }
static uint64_t ntohll(uint64_t x) { return __bswap_64(x); }
uint64_t test_bswap64 ( uint64_t x ) { return __bswap_64 ( x ); }
int main() { printf("%d\n", check_cpu_endian()); printf("%d\n", check_cpu_endian2()); printf("%d\n", check_cpu_endian3()); printf("%d\n", is_bigendian()); printf("sizeof(short int)=%lu\n", sizeof(short int)); printf("sizeof(int)=%lu\n", sizeof(int)); printf("sizeof(long int)=%lu\n", sizeof(long int)); printf("sizeof(long long int)=%lu\n", sizeof(long long int)); printf("~0=0x%X\n", (uint8_t)~0); printf("~0 << 8=0x%X\n", (uint8_t)~0 << 8); printf("~0 << 56=0x%lX\n", (uint64_t)((uint8_t)~0) << 56); int aa = -3; unsigned int bb = aa; int cc = bb; printf("int %d; uint %u int %d\n", aa, bb, cc); /* uint32_t dd = UINT32_MAX; int32_t ee = dd; printf("uintmax %u int %d\n", dd, ee); */ puts("32-------------------"); int n1 = 0x12345678; unsigned char* pc = (unsigned char*)(&n1); printf("cpu order:\n"); print_endian(pc, 32); n1 = htonl(n1); printf("htonl order:\n"); print_endian(pc, 32); n1 = BigLittleSwap32(n1); printf("BigLittleSwap32 order:\n"); print_endian(pc, 32); puts("64-------------------"); uint64_t n2 = 0x1A2B3C4D12345678; pc = (unsigned char*)(&n2); printf("cpu order:\n"); print_endian(pc, 64); n2 = BigLittleSwap64(n2); printf("BigLittleSwap64 order:\n"); print_endian(pc, 64); n2 = __bswap_64(n2); printf("__bswap_64 order:\n"); print_endian(pc, 64); n2 = LITTLE_ENDIAN_CHANGE(n2, 64); printf("LITTLE_ENDIAN_CHANGE64 order:\n"); print_endian(pc, 64); n2 = BIG_ENDIAN_CHANGE(n2, 64); printf("BIG_ENDIAN_CHANGE64 order:\n"); print_endian(pc, 64); puts("16-------------------"); uint16_t n3 = 0x1234; pc = (unsigned char*)(&n3); printf("cpu order:\n"); print_endian(pc, 16); n3 = BigLittleSwap16(n3); printf("BigLittleSwap16 order:\n"); print_endian(pc, 16); n3 = little_endian_chg16(n3); printf("little_endian_chg16 order:\n"); print_endian(pc, 16); n3 = LITTLE_ENDIAN_CHANGE(n3, 16); printf("LITTLE_ENDIAN_CHANGE16 order:\n"); print_endian(pc, 16); n3 = BIG_ENDIAN_CHANGE(n3, 16); printf("BIG_ENDIAN_CHANGE16 order:\n"); print_endian(pc, 16); n3 = stream_ltt_bit16(pc, 16); printf("stream_ltt_bit16 order:\n"); print_endian(pc, 16); n3 = stream_big_bit16(pc, 16); printf("stream_big_bit16 order:\n"); print_endian(pc, 16); puts("16-------------------"); uint16_t tn = 0x1234; print_endian((unsigned char*)(&tn), 16); uint64_t n4 = stream_ltt_bit64((unsigned char*)(&tn), 16); pc = (unsigned char*)(&n4); printf("stream_ltt_bit64 order:\n"); print_endian(pc, 64); n4 = stream_big_bit64((unsigned char*)(&tn), 16); pc = (unsigned char*)(&n4); printf("stream_big_bit64 order:\n"); print_endian(pc, 64); puts("32-------------------"); char buff[4] = {'\x12', '\x34', '\x56', '\x78'}; print_endian((unsigned char *)buff, 32); const char *p = buff; printf("p=%p\n", p); int m0 = stream_ltt_bit32(&p, 4); printf("p=%p m=0x%X\n", p, m0); char buff2[4]; char *p2 = buff2; printf("p=%p\n", p2); p2 = bit32_ltt_stream(m0, p2, 4); print_endian((unsigned char *)buff2, 32); printf("p=%p\n", p2); return 0; }
uint64_t ntoh64(uint64_t val) { if (__BYTE_ORDER == __BIG_ENDIAN) return (val); else return __bswap_64(val); }