测试大小端

字节序(Byte Order)

是指多字节数据类型(如16位、32位或64位的整数)在计算机系统中存储时,字节是如何排列的。计算机内存是以字节为单位的,而一个字节是8位(bit)。当处理大于一个字节的数据时,不同的硬件架构可能会以不同的方式存储这些字节。

主要存在两种字节序:

  • 小端字节序(Little Endian):在小端模式下,最低有效字节(即二进制表示中的最低位所在的字节)被存储在内存的最低地址处,最高有效字节则存储在内存的最高地址处
  • 大端字节序(Big Endian):与小端相反,在大端模式下,最高有效字节存储在内存的最低地址处,最低有效字节则存储在内存的最高地址处。
    在这里插入图片描述

测试大小端

方法一:
使用共用体。共用体使用的为同一块内存,可以理由这个特性来测试存储的是高字节还是低字节

#include <stdio.h>
#include <arpa/inet.h>

int main(int argc, char const *argv[])
{
    union un
    {
        int b;
        char c;
    }a;
    a.b = 0x12345678;
    printf("%#x\n",a.c);
    return 0;
}

放大二:
指针强转

#include <stdio.h>
#include <arpa/inet.h>

int main(int argc, char const *argv[])
{
    int a = 0x12345678;
    char*p = (char *)&a;
    printf("%#x\n",*p);
    //host to net long 将主机字节序转为网络字节序
    int ch = htonl(a);
    char*p2 = (char *)&ch;
    printf("%#x\n",*p2);

    return 0;
}

输出结果
在这里插入图片描述
char类型长度为一个字节,强制转换后是低字节0x78,所以主机为低字节序

总结

计算机网络通信中,一般情况下,电脑端是低字节序,网络端为高字节序。
为了处理字节序的问题,编程语言和库提供了转换函数,比如C语言中的ntohs()、htons()、ntohl()、htonl()等函数用于在主机字节序和网络字节序之间转换。

  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值