位域 内存 字节序_关于位域和字节序的问题

本文探讨位域和字节序的概念,特别是在Windows Socket编程中的应用。位域内部不涉及字节序问题,而字节序转换主要针对多字节整型值。位序和字节序在不同实现中可能不同,对于存储到文件或网络传输的情况,需要考虑校正。通过位序和字节序检测方法,可以确保在不同平台上正确处理数据。
摘要由CSDN通过智能技术生成

检索了一下,论坛里3年以来没有相关的帖子,时间上可能最近的一篇为 http://bbs.csdn.net/topics/390383203

To:没有用过位域的坛友,这里给个例子(变化自IP头结构):

struct MyStruct

{

BYTE a : 4;   // 低4位

BYTE b : 4;   // 高4位

WORD c : 13; // 低13位

WORD d : 3;   // 高3位

}

近来用到套接字和原始套接字,也用到位域,研究了一下位域和字节序的问题。

先说一下字节序。

由于网口数据是大端序,而Windows是小端序,所以Windows Socket编程中,

对超过一个字节的整型值,就需要做字节序的转换(如针对IP头)。请注意,

字节序针对的只是多字节的整体数据,字符或字节数组并不涉及字节序问题,

原因是是逐个字节存储的。多字节类型数组,元素的顺序与字节序需无关,元素

本身则涉及字节序问题。

然而位域这个东西确是特殊的,需明确一下,不论位域能否跨字节,位域内部

均不涉及字节序问题。实际上我们需要想一下,在发送端,位域是怎么填充的,

显然并不是数值赋值操作,而是字节填充或拷贝操作。这也就不涉及字节序了,

只是要注意一下在struct声明中,前后两个变量哪个表示低位,哪个表示高位。

解决方案

20

引用

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值