char 指针转换 int 指针

小江啊 2011-04-06 09:09:35
初学 c/c++ 碰上一个问题
贴上大致的代码
#include<iostream.h>
void test(char p[])
void main(void)
{
char ch[]={0x47,0x32,0x14,0x55};
test(ch);
}
void test(char p[])
{
int *ip;
ip=(int *)p//p是一个指针 存着字符数组ch的首地址 所以这么转应该没有问题吧?
cout.setf(ios::hex);
cout<<*ip<<endl;
}

这段代码打印出来的值是55143247不知道为什么值会是字符反转 我本来以为值会是 47321455(十六进制);求解
//公司没有外网 只有公共上网区 中午来看答案
...全文
497 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
陈思有 2011-04-06
  • 打赏
  • 举报
回复
刚学C语言
小江啊 2011-04-06
  • 打赏
  • 举报
回复
没人在吗? 我中午睡觉去了 晚上下班再来看一下
小江啊 2011-04-06
  • 打赏
  • 举报
回复
我弱弱的说一句 感觉不是大小端的问题
大小端 应该是 长字节转成短的字节 截取的时候 才会说 从头截取 或者从尾截取(也就是低高位问题)
但是我是一个指向数组表头的指针 从左往右 取四个字节 应该不存在大小端问题吧
blackstar8888 2011-04-06
  • 打赏
  • 举报
回复
最后两句
cout.setf(ios::hex);
cout<<*ip<<endl;
改成
cout<<hex<<*ip<<endl;
最好不要用cout.setf();不然不是以16进制方式显示。

lz的机子是小端。低字节存放在低地址。
p[3] 55 0x8003
p[2] 14 0x8002
p[1] 32 0x8001
ip-> p[0] 47 0x8000
luciferisnotsatan 2011-04-06
  • 打赏
  • 举报
回复
http://baike.baidu.com/view/2194385.htm
luciferisnotsatan 2011-04-06
  • 打赏
  • 举报
回复
字节序问题。
你的电脑是小端
yang_jnu 2011-04-06
  • 打赏
  • 举报
回复
现在地址从低到高分别存储 0x47,0x32,0x14,0x55 ,强制转换后,小端序解释为55143247,大端序解释为47321455,一般intel的都是小端序,所以输出的结果是55143247
yang_jnu 2011-04-06
  • 打赏
  • 举报
回复
字节序问题。。。。。
luxingqiang110 2011-04-06
  • 打赏
  • 举报
回复
先写个内联结构体,判断下是大端还是小端,再进行就算。
lt114896 2011-04-06
  • 打赏
  • 举报
回复
在x86机上ip是指向字符型ch的最低地址字节,这样的话对ip逐步++就顺次访问到了ch的全部字节,导致了字符串的反转
辰岡墨竹 2011-04-06
  • 打赏
  • 举报
回复
不,LZ的机器是little-endian,X86的吧。你这段代码在Big-endian的PowerPC机器上才会像你想像地那样工作。
bargio_susie 2011-04-06
  • 打赏
  • 举报
回复
LZ的机器是大端的
bruceteen 2011-04-06
  • 打赏
  • 举报
回复
传说中的 little-endian
luciferisnotsatan 2011-04-06
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 wujiyongheng 的回复:]

我弱弱的说一句 感觉不是大小端的问题
大小端 应该是 长字节转成短的字节 截取的时候 才会说 从头截取 或者从尾截取(也就是低高位问题)
但是我是一个指向数组表头的指针 从左往右 取四个字节 应该不存在大小端问题吧
[/Quote]
就是大小端的问题。
char ch[]={0x47,0x32,0x14,0x55};
内存里的排列
0x47 0x32 0x14 0x55
然后你把这段解析成int,那int的4字节内存里同样是
0x47 0x32 0x14 0x55
小端,高位在高地址。转换后就是
0x55143247

33,321

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧