Linux 服务器和客户端信息获取(一)

字节序转换

一、字节序

1.字节序概念

字节序是由于不同的主处理器和操作系统,对大于一个字节的变量在内存中的存放顺序不同而产生的,字节序是由于CPU和OS对多字节变量的内存存储顺序不同而产生的。字节序通常有大端字节序和小端字节序两种分类方法。

小端字节序:在表示变量的内存地址的起始地址存放低字节,高字节顺序存放。
大端字节序:在表示变量的内存地址的起始地址存放高字节,低字节顺序存放。

在这里插入图片描述

二、转换实例

1、16位字节序转换结构

先定义用于16 位字节序转换的结构to16,这个结构是一个联合类型,通过value来赋值,通过byte数组来进行字节序转换。

#include<stdio.h>
/*联合类型的变量类型,用于测试字节序,成员value的高低段字节可以由成员type按字节访问*/

/*16为字节序转换结构*/
typedef union{
   
unsigned short int value;    /*16位short类型变量value*/
unsigned char byte[2];      /*char类型数组,共16位*/
}to16;

2、32位字节序转换结构

用于32 位字节序转换的结构名称为to32,与to16 相似,它也有两个成员变量: value和byte。成员变量value 是一个unsigned long int 类型的变量,32 位长:成员变量byte 是一个char 类型的数组,数组的长度为4,也是32 位长。32 位字节序的转换可以通过to32的value成员变量来赋值,通过byte 来进行字节序的转换。

/*32为字节序转换结构*/
typedef union{
   
unsigned long int value;     /*32位unsigned long类型变量*/
unsigned char byte[4];     /*char类型数组,共32位*/
}to32;

3、变量值打印函数showvalue()

showvalue()函数用于打印变量值输入参数,一个是变量的地址指针begin,一个是表示字长的标志负吨。参数flag 的值为BITS16 的时候打印16 位变量的值,参数flag 为BITS32 的时候打印32位变量的值。

#define BITS16 16
#define BITS32 32
/*按照字节打印,begin为字节开始,
flag为BITS16表示16位,
flag位BITS32表示32位。*/
void showvalue(unsigned char*begin,int flag){
   
int num=0,i=0;
if(flag==BITS16){
         /*一个16b的变量*/
num=2;
}else if(flag==BITS32){
        
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值