使用C++将网络字节流转为数字(大端与小端区别)

首先需要了解下大端和小端存储的区别:
大端方式:用存储器的低字节地址单元来存放数据的最高字节
小端存放:用存储器的低字节地址单元来存放数据的最低字节
如下图所示:
在这里插入图片描述
网络上都是以字节流的方式传输数据的,网络字节顺序是网络传输时的字节序,按照TCP/IP协议是按照大端字节序传输方式,也就是高字节先走(先传12,接着34,56,78),确保双方解析对应即可。

网络字节序是大端字节序,我们经过网络发送整型数值0x12345678时,在X86平台中它是以小端发存放的,在发送之前需要使用系统提供的,字节序转换函数htonl(),将其转换成大端法存放的数值;
转换代码(C++):

    template<typename Num>
    void   NetworkToHost(const uint8_t* src, Num& num)
    {
        size_t  sizeOfNum= sizeof(num);
        if (IsLittleEndian())      //小端存储,需要转换
        {
            uint8_t* dst = reinterpret_cast<uint8_t*>(&num) + sz - 1;
            for (size_t i = 0; i < sizeOfNum; ++i)
            {
                *dst-- = *src++;
            }
        }
        else       //大端存储,直接将网络字节流拷贝过去
        {
            memmove(&num, src, sizeOfNum);
        }
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值