登录|立即注册|使用QQ帐号登录
论坛 > 24小时必答区
发帖|
看12020|回14|收藏
楼主 ID:300603 只看他
2018-9-11 20:39
如何将一个int型数据存到char型数组中?
或者如何将int型转化char型


沙发 ID:277550 只看他
2018-9-11 22:32
假设 int i是32位
ch[0]=(i>>24)&0xff;
ch[1]=(i>>16)&0xff;
ch[2]=(i>>8)&0xff;
ch[3]=i&0xff;


~~~~~~~~~~~~~~~~
板凳 ID:394504 只看他
2018-9-11 22:33
用联合体 union
{
    int a ;

}
地板 ID:394504 只看他
2018-9-11 22:35
union
{
     int a;
     char b1;
     char b2;
}
把数写入 a  在读 b1 就是 a 的高8位 b2 就是 a的 低8位
5# ID:375092 只看他
2018-9-11 22:38
首先int是16位的,char是8位的,要想int转换为八位的话,如果直接赋值那么你的高八位会丢失,所以你需要赋值两次,第一次直接赋值获得第八位,然后int型数据右移八位,然后直接赋值,这样你就把一个int数据用两个char型变量保存起来了
6# ID:155507 只看他
2018-9-11 22:59
int型是四个字节大小,char 型是一个字节。

所以int型赋值给char数组需要把int型拆分。
int型拆分成四个字节,按顺序保存在char型数组中就可以了。
具体代码如下:
int i =4;
char a[100];
for(int j=0; j<sizeof(int); j++)
{
        a[j]=((i>>(8*j))&0xff);
}
其中int型的值4就保存在了char型的数组a中了。
7# ID:300603 只看他
2018-9-12 16:41

引用:

angmall 发表于 2018-9-11 22:59
int型是四个字节大小,char 型是一个字节。

所以int型赋值给char数组需要把int型拆分。

我想做的是一个无线数据传输  用的是24L01模块 用的是DS18B020采集温度现在的问题是采集到的数据是float型而传输的数据是char型 我该怎么将这个温度传出去
8# ID:397105 只看他
2018-9-12 16:54
把 int 分为高8位和低8位传给char数组
9# ID:397093 只看他
2018-9-12 17:06
强制转化就行了
10# ID:397120 只看他
2018-9-12 17:19
不是有专门的函数吗?
11# ID:155507 只看他
2018-9-12 17:29

引用:

qcx 发表于 2018-9-12 16:41
我想做的是一个无线数据传输  用的是24L01模块 用的是DS18B020采集温度现在的问题是采集到的数据是float ...

用c语言关键字union来解决。

union xxx
{
  char c[4];
  float f;
}y;

定义一个“共用体”xxx,y作为“共用体变量”,里面再定义一个char类型的变量数组c[4]和float类型的变量f。

根据union的定义,里面的变量占用同一个内存地址。所以,c[4]和f的内存地址是一样的,说的再通俗一点,就是c[4]的4个数实际上就是f的四个字节。

12# ID:300603 只看他
2018-9-13 13:43

引用:

shirusong 发表于 2018-9-12 17:19
不是有专门的函数吗?

是什么 我没找到 第一次接触 求指点
13# ID:397456 只看他
2018-9-13 14:20
简单直观理解,就是用转换,
高级点就是用共用体
14# ID:397387 只看他
2018-9-13 14:34
首先你要先知道你用的编译器的int是几个字节,如果是两个字节可以定义两个char型变量,第一个赋int的高8位,第二个赋int的低8位,如果是四个字节的话也类似
15# ID:397510 只看他
2018-9-13 15:37
我也想学习,请大神指教

51黑电子论坛

Powered by Discuz! X3.1

首页|标准版|触屏版|电脑版