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

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

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

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

我直接想到了移位

  1. int a = -64;
  2. char b = a>>24;
  3. char c = a>>16;
  4. char d = a>>8;
  5. char e = a;

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

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

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


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

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

  1. union data
  2. {
  3. int Int;
  4. char Char[4];
  5. }test;
  6. test.Int = -64;

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

(0)

相关推荐