找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 12018|回复: 14
打印 上一主题 下一主题
收起左侧

stm32如何将一个int型数据存到char型数组中?

  [复制链接]
跳转到指定楼层
楼主
ID:300603 发表于 2018-9-11 20:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如何将一个int型数据存到char型数组中?
或者如何将int型转化char型


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
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;


~~~~~~~~~~~~~~~~

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

板凳
ID:394504 发表于 2018-9-11 22:33 | 只看该作者
用联合体 union
{
    int a ;

}

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

地板
ID:394504 发表于 2018-9-11 22:35 | 只看该作者
union
{
     int a;
     char b1;
     char b2;
}
把数写入 a  在读 b1 就是 a 的高8位 b2 就是 a的 低8位

评分

参与人数 2黑币 +30 收起 理由
NPC-1024 + 10 正解!很给力!
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

5#
ID:375092 发表于 2018-9-11 22:38 | 只看该作者
首先int是16位的,char是8位的,要想int转换为八位的话,如果直接赋值那么你的高八位会丢失,所以你需要赋值两次,第一次直接赋值获得第八位,然后int型数据右移八位,然后直接赋值,这样你就把一个int数据用两个char型变量保存起来了

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

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中了。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

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黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表