将一个32位的整数拆成4个char

今天做了个跟电机通信的小程序,要用到一个32位的整数表示电机的速度或者位置信息。

传输的数据用的是字符串,开始想的是用取余数的办法,但因为有负数涉及到补码什么很容易搞错的东西,干脆直接把32位的整数直接拆成4个char,简单粗暴肯定不会错。

原理很简单,一个char8位,只要想办法把int的4个8位分别拿出来的就可以了。

我直接想到了移位

int a = -64;
char b = a>>24;
char c = a>>16;
char d = a>>8;
char e = a;
因为char直接转换只能那倒int的低8位,利用这个特性b,c,d,e分别是整数的从高到低位。

看到网上的代码,用指针的办法:

int Int = -1000;//随便什么数
char* p  = (char*)&Int
char a[4];
a[0] = *((char*)p + 0);
a[1] = *((char*)p + 1);
...

上面的代码就是取int的地址,然后指针往前一个个移动就可以拿出4个char。

还有个利用c++的结构体联合union:

union data
 {
  int Int;
  char Char[4];
 }test;
 test.Int = -64;

Char与int一样的内存,还是很巧妙的啊。



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值