打印

3字节的数组,类型强制转换成int16型,结果是什么?

[复制链接]
3615|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
奔牛滚滚|  楼主 | 2013-1-14 10:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
dirtwillfly| | 2013-1-14 10:45 | 只看该作者
建议楼主亲自调试下。印象更深刻,别人说的,可能你过两天就又忘了。
纸上得来终觉浅~

使用特权

评论回复
板凳
奔牛滚滚|  楼主 | 2013-1-14 10:51 | 只看该作者
dirtwillfly 发表于 2013-1-14 10:45
建议楼主亲自调试下。印象更深刻,别人说的,可能你过两天就又忘了。
纸上得来终觉浅~ ...

楼上,试过了,才发帖的

使用特权

评论回复
地板
dirtwillfly| | 2013-1-14 10:53 | 只看该作者
奔牛滚滚 发表于 2013-1-14 10:51
楼上,试过了,才发帖的

没得出结果吗?还是来考考大家?:P

使用特权

评论回复
5
ayb_ice| | 2013-1-14 10:55 | 只看该作者
就是连续读两个字节,结果取决于编译器的大小端格式

使用特权

评论回复
6
liusensen| | 2013-1-14 11:04 | 只看该作者
没算出来  

使用特权

评论回复
7
原野之狼| | 2013-1-14 12:30 | 只看该作者
1  考虑大小端
2  考虑对齐

使用特权

评论回复
8
jiemnij| | 2013-1-14 12:44 | 只看该作者
楼上几位都错了.
跟大小端模式没啥关系的.
他又不是采用指针类型转化,取指针,只不过是强值转化而已.
a是 uint8_t, 所以*a的值是1
强值转化后的结果..uint16_t(*a) == 0x0001, 所以无所谓大小端模式

要涉及到大小端模式写法是
*(uint16_t *)&a 这个才是, 相当与对给地址去16位长度,指针值而已.

//------------------------------------------
3字节的数组,类型强制转换成int16型,结果是什么?
uint8_t  a[0]=0x01,a[1]=0x02,a[2]=0x03;
t=(int16_t)(*a);
t等于多少?
//-------------------------------

使用特权

评论回复
9
hechnology| | 2013-1-14 13:24 | 只看该作者
大小端是一个,对齐是一个,要不会hard fault

使用特权

评论回复
10
hwk612167| | 2013-1-14 14:32 | 只看该作者
8楼正确!
t = 0x0001;
顺便确认下 uint8_t  a[0]=0x01,a[1]=0x02,a[2]=0x03; 这么写写**确?

使用特权

评论回复
11
hwk612167| | 2013-1-14 14:34 | 只看该作者
本帖最后由 hwk612167 于 2013-1-14 14:35 编辑

论坛连  falv 的 fa 这个字都屏蔽?写成 三点水+去 两个字也能屏蔽,,高级

使用特权

评论回复
12
ayb_ice| | 2013-1-14 15:21 | 只看该作者
很明显,LZr意思是:
把一个有3个成员的unsigned char数组的首地址强制转换成一个指针,指向unsigned int的变量,通过指针取出变量,结果会怎样,这个与大小端有关

结果代码写错了,写成了将第0个成员强制转换成了unsigned int,这个与大小端无关

使用特权

评论回复
13
amwrdfe| | 2013-1-14 16:24 | 只看该作者
uint8_t  a[0]=0x01,a[1]=0x02,a[2]=0x03;
确定这样能编译过去?

使用特权

评论回复
14
奔牛滚滚|  楼主 | 2013-1-14 16:45 | 只看该作者
a[0]=0x01,a[1]=0x02,a[2]=0x03;
这么写只是匆忙间做个意思表达而已,这么写是通不过的
t=(int16_t)(*a)
t=*(int16_t *)(a)
t=*(int16_t)(a)
结果完全不同,无意中造成的错误

使用特权

评论回复
15
zhaofy521| | 2013-1-15 09:02 | 只看该作者
问法明显就问题

使用特权

评论回复
16
ccxlslr| | 2013-1-15 10:45 | 只看该作者
jiemnij 发表于 2013-1-14 12:44
楼上几位都错了.
跟大小端模式没啥关系的.
他又不是采用指针类型转化,取指针,只不过是强值转化而已.

数组名是常量,本身就是地址,你再&a 是什么意思!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

384

主题

1461

帖子

6

粉丝