在整型变量中区某个字节,使用指针为什么不行?

lijian22500 2009-07-20 10:22:54
int t = 65<<8;
char *p = (char*)&t - 1;
printf("*p = %c\n",*p);

输出为:-52 (0xffffffcc)
我以为会是65.

能不能通过指针获得多字节变量(int,float)中某个字节的值?
...全文
92 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jagen在路上 2009-07-28
  • 打赏
  • 举报
回复
貌似楼主的逻辑有问题哦,你虽然做的是移位运算,但是也不可能移出本整形地址空间啊?你取地址-1,呵呵,那个地址鬼才知道什么内容。
ForestDB 2009-07-21
  • 打赏
  • 举报
回复

#include <stdio.h>

typedef unsigned char byte;

void print(const byte * base, int n)
{
int i;
for (i = 0; i < n; ++i)
{
printf("0x%02X ", base[i]);
}
printf("\n");
}

int main(int argc, char * argv[])
{
int i = 65;
print((byte *)&i, sizeof(i));
i <<= 8;
print((byte *)&i, sizeof(i));

return 0;
}

0x41 0x00 0x00 0x00
0x00 0x41 0x00 0x00
Arnold9009 2009-07-20
  • 打赏
  • 举报
回复
这种问题还是用逻辑运算来做吧

用指针的话,涉及的概念比较多,如:指针加减、变量的存储等
hoomey 2009-07-20
  • 打赏
  • 举报
回复

int t = 65 < <8;
char *p = (char*)&t + 1;
printf("*p = %c\n",*p);



这样好像可以,
要考虑高字节序还是低字节序的
changhe325 2009-07-20
  • 打赏
  • 举报
回复
要考虑大端还是小端模式, 所谓的大端模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中;所谓的小端模式,是指数据的低位保存在内存的低地址中,而数据的高位保存在内存的高地址中。我们常用的X86结构是小端模式。所以应该char *p = (char*)&t + 1;

33,311

社区成员

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

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