OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8349|回复: 16

请教下大家关于整数拆分成字节数组的问题

[复制链接]

21

主题

218

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2277
金钱
2277
注册时间
2017-12-11
在线时间
486 小时
发表于 2022-7-18 20:18:51 | 显示全部楼层 |阅读模式
1金钱
请教下大家关于整数拆分成字节数组的问题,就是如何把一个整数拆分成两个字节数组,比如 305,转换成 两个字节数组 就是data[0]=0x01;data[1]=0x31,这个该怎么写?


最佳答案

查看完整内容[请看2#楼]

不是这样的。 一般这样就可以了: unsigned int result; result = ((unsigned int)data[1])
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

84

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1360
金钱
1360
注册时间
2021-2-25
在线时间
100 小时
发表于 2022-7-18 20:18:52 | 显示全部楼层
白纸扇001 发表于 2022-7-19 13:07
感谢老哥的指点,那把拆分后的数据合并是不是就是这样操作result = (unsigned char)(((unsigned char)dat ...

不是这样的。
一般这样就可以了:
unsigned int result;
result = ((unsigned int)data[1]) << 8 | (unsigned int)data[0]);
注意是 "|" 不是 "||"
回复

使用道具 举报

21

主题

218

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2277
金钱
2277
注册时间
2017-12-11
在线时间
486 小时
 楼主| 发表于 2022-7-18 20:19:49 | 显示全部楼层
把整数拆分成高八位和低八位
回复

使用道具 举报

12

主题

3380

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8608
金钱
8608
注册时间
2020-5-11
在线时间
4042 小时
发表于 2022-7-18 20:31:43 | 显示全部楼层
C语言位运算了解一下,也可以用指针、联合体等方法:
int x=305;char data[2];
data[0]=x>>8;data[1]=x;
专治疑难杂症
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2022-7-16
在线时间
2 小时
发表于 2022-7-18 22:43:02 | 显示全部楼层
上面的方法不错。
我最开始考虑的是下面方法,请参考:

unsigned int x=305;
unsigned char data[2];
data[0]=( x & 0xFF00 ) / 256;
data[1]=( x & 0x0000 ) % 256;
回复

使用道具 举报

25

主题

180

帖子

0

精华

高级会员

Rank: 4

积分
596
金钱
596
注册时间
2015-1-14
在线时间
152 小时
发表于 2022-7-19 09:14:08 | 显示全部楼层
对256取模取余就行了
回复

使用道具 举报

0

主题

84

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1360
金钱
1360
注册时间
2021-2-25
在线时间
100 小时
发表于 2022-7-19 10:05:22 | 显示全部楼层
我一般是这样的
unsigned int x = 305;
unsigned char data[2];
data[0] = (unsigned char)((x & 0xFF00) >> 8);
data[1] = (unsigned char)(x & 0x00FF);
回复

使用道具 举报

21

主题

218

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2277
金钱
2277
注册时间
2017-12-11
在线时间
486 小时
 楼主| 发表于 2022-7-19 13:04:31 | 显示全部楼层
LcwSwust 发表于 2022-7-18 20:31
C语言位运算了解一下,也可以用指针、联合体等方法:
int x=305;char data[2];
data[0]=x>>8;data[1]=x;

感谢老哥的指点
回复

使用道具 举报

21

主题

218

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2277
金钱
2277
注册时间
2017-12-11
在线时间
486 小时
 楼主| 发表于 2022-7-19 13:07:02 | 显示全部楼层
zlucas 发表于 2022-7-18 22:43
上面的方法不错。
我最开始考虑的是下面方法,请参考:

感谢老哥的指点,那把拆分后的数据合并是不是就是这样操作result = (unsigned char)(((unsigned char)data[1])<<8 || data[0])?
回复

使用道具 举报

21

主题

218

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2277
金钱
2277
注册时间
2017-12-11
在线时间
486 小时
 楼主| 发表于 2022-7-19 13:07:28 | 显示全部楼层
jiangxin0571 发表于 2022-7-19 10:05
我一般是这样的
unsigned int x = 305;
unsigned char data[2];

感谢老哥的指点,那把拆分后的数据合并是不是就是这样操作result = (unsigned char)(((unsigned char)data[1])<<8 || data[0])?
回复

使用道具 举报

49

主题

341

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
5262
金钱
5262
注册时间
2012-8-25
在线时间
1025 小时
发表于 2022-7-19 13:18:50 | 显示全部楼层
unsigned int x = 305;
unsigned char data[4];
*(unsigned int *)data = x;
回复

使用道具 举报

3

主题

808

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3867
金钱
3867
注册时间
2017-3-7
在线时间
1687 小时
发表于 2022-7-19 13:34:12 | 显示全部楼层
嗯,如果确定大小端,可以直接通过指针操作
回复

使用道具 举报

21

主题

218

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2277
金钱
2277
注册时间
2017-12-11
在线时间
486 小时
 楼主| 发表于 2022-7-19 13:41:21 | 显示全部楼层
Mrjiang 发表于 2022-7-19 09:14
对256取模取余就行了

感谢回复了
回复

使用道具 举报

21

主题

218

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2277
金钱
2277
注册时间
2017-12-11
在线时间
486 小时
 楼主| 发表于 2022-7-21 18:57:49 | 显示全部楼层
gotofly21 发表于 2022-7-19 13:18
unsigned int x = 305;
unsigned char data[4];
*(unsigned int *)data = x;

感谢老哥的指点了
回复

使用道具 举报

21

主题

218

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2277
金钱
2277
注册时间
2017-12-11
在线时间
486 小时
 楼主| 发表于 2022-7-21 18:58:32 | 显示全部楼层
a5820736 发表于 2022-7-19 13:34
嗯,如果确定大小端,可以直接通过指针操作

感谢老哥的指点了,我C语言比较菜,就不用指针了
回复

使用道具 举报

233

主题

960

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1812
金钱
1812
注册时间
2011-10-9
在线时间
229 小时
发表于 2022-7-22 15:40:44 | 显示全部楼层
本帖最后由 simms01 于 2022-7-22 15:48 编辑

u8 a[2];
u16 x;
x=305;
a[0]=x>>8;
a[1]=x;
j结果
a[0]=0x01 a[1]=0x31;

x=a[0]<<8+a[1];

回复

使用道具 举报

21

主题

218

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2277
金钱
2277
注册时间
2017-12-11
在线时间
486 小时
 楼主| 发表于 2022-7-23 13:13:39 | 显示全部楼层
simms01 发表于 2022-7-22 15:40
u8 a[2];
u16 x;
x=305;

感谢老哥的回复了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-4-26 19:02

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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