为了账号安全,请及时绑定邮箱和手机立即绑定

大端模式小端模式

大端模式小端模式

饮歌长啸 2019-04-19 16:29:51
考虑如下代码:char*str="1234567890";shortresult=(short)(*(str+2));cout
查看完整描述

2 回答

?
波斯汪

TA贡献1811条经验 获得超4个赞

str是char*类型的指针,那么(str+4)是指向了字符'5'.
*((short*)(addr))这里是告诉cpu如何去取这个指针指向的地址的数据。以*((short*)(addr))取,就是取2字节。以*((int*)(addr))取,就是取4字节。
大小端的问题来了。*((short*)(addr))这两字节怎么取。记住,数据的最小单元是字节,字节内部不会有大小端问题的,不管是大端还是小端,都是一样的。'5'就是ascii码0x35。'6'就是ascii码0x36。超过一字节的类型才有大小端问题。intel处理器是小端,从高字节往低字节取,所以是0x3635。
                            
查看完整回答
反对 回复 2019-04-19
?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

str+4是short指针,两个字节,所以范围是字符串"56",'5'是0x35,'6'是0x36,由于是小端模式,应该是0x3635,换算成10进制是13877
字符串不涉及大端小端,只有某一个整形的数字占据多个字节的时候才涉及大端小端。
                            
查看完整回答
反对 回复 2019-04-19
  • 2 回答
  • 0 关注
  • 676 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号