将一个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一样的内存,还是很巧妙的啊。
赞 (0)