#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define ntohll(src) convert(src)
#define htonll(src) convert(src)
inline unsigned long long convert(unsigned long long src)
{
unsigned long long dst = 0;
unsigned long long temp = 0;
unsigned char buf[8];
memcpy(buf, &src, 8);
int idx = 0;
int offset = 56;
while (idx < 8)
{
temp = buf[idx++];
dst |= (temp << offset);
offset -= 8;
}
return dst;
}
int main()
{
unsigned char buf[] = {0x12, 0x34, 0x56, 0x78, 0xab, 0xcd, 0xef, 0xff};
unsigned long long u64Test = 0;
memcpy(&u64Test, buf, 8);
unsigned long long u64TestResult = ntohll(u64Test);
printf("u64Test: 0x%llx\n", u64Test);
printf("u64TestResult: 0x%llx\n", u64TestResult);
unsigned long long u64Test1 = 0x12345678abcdefff;
//unsigned long long u64TestResult1 = htonll(u64Test1);
unsigned long long u64TestResult1 = ntohll(u64Test1);
printf("u64Test1: 0x%llx\n", u64Test1);
printf("u64TestResult1: 0x%llx\n", u64TestResult1);
unsigned int u32Test = 0x1234abcd;
unsigned int u32TestResult = htonl(u32Test);
printf("u32Test: 0x%x\n", u32Test);
printf("u32TestResult: 0x%x\n", u32TestResult);
unsigned int u32TestResult1 = htonl(u32TestResult);
printf("u32TestResult1: 0x%x\n", u32TestResult1);
return 0;
}
unsigned long long 大小端互转
最新推荐文章于 2024-08-02 08:30:00 发布