考虑如下代码: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。
慕桂英3389331
TA贡献2036条经验 获得超8个赞
str+4是short指针,两个字节,所以范围是字符串"56",'5'是0x35,'6'是0x36,由于是小端模式,应该是0x3635,换算成10进制是13877字符串不涉及大端小端,只有某一个整形的数字占据多个字节的时候才涉及大端小端。
添加回答
举报
0/150
提交
取消
