32位的高16位和低16为表示方法

zhuoxuan216 2013-05-08 10:16:15
如题。32位系统中每一个地址都是32位的,想将这个地址的高16为和低16位,分别表示进行利用,请问怎么表示比如一个地址0x00010000
...全文
2814 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
devang 2014-03-28
  • 打赏
  • 举报
回复
#define LOWORD(l) ((WORD)(l)) #define HIWORD(l) ((WORD)((DWORD)(l) >> 16))
zwfgdlc 2013-05-14
  • 打赏
  • 举报
回复
可以的.带符号位.


引用 15 楼 zhuoxuan216 的回复:
[quote=引用 14 楼 zwfgdlc 的回复:]
[quote=引用 13 楼 zhuoxuan216 的回复:]
[quote=引用 12 楼 zwfgdlc 的回复:]

int a;
short* b = (short*)&a;
b[0] = 0xab;
b[1] = 0xcd;

这样行不行.

不好意思没有看懂,能不能说详细点。谢谢[/quote]
把32位的int当2个16位的数组来处理.
把0xcd放入低16位,把0xab放入高16位.
不知道你是不是这个意思.[/quote]
是这个意思,需要存的两个数都要包括符号位[/quote]
zhuoxuan216 2013-05-14
  • 打赏
  • 举报
回复
引用 16 楼 zwfgdlc 的回复:
可以的.带符号位.
[/quote] 想把处理好的两个16位的数拼接成32位,然后用这种方式*0x0A0000000=b;将拼接好的值放到一个地址中,可以么
zhuoxuan216 2013-05-14
  • 打赏
  • 举报
回复
[/quote][/quote] 想把处理好的两个16位的数拼接成32位,然后用这种方式*0x0A0000000=b;将拼接好的值放到一个地址中,可以么
sophyyoung 2013-05-14
  • 打赏
  • 举报
回复
“32位系统中每一个地址都是32位的”不是在将地址吗? 地址何需符号位~~ Windef.h 里本来 就有取高低字的宏定义。

#define LOWORD(l)           ((WORD)(((DWORD_PTR)(l)) & 0xffff))
#define HIWORD(l)           ((WORD)((((DWORD_PTR)(l)) >> 16) & 0xffff))
yaozhiyong110 2013-05-09
  • 打赏
  • 举报
回复
DWORD dwData; dwData = (a[i] << 16) & 0xFFFF0000; dwData = dwData & (b[i] & 0xFFFF);
youyou1912 2013-05-09
  • 打赏
  • 举报
回复
引用 9 楼 zhuoxuan216 的回复:
[quote=引用 8 楼 youyou1912 的回复:] 不过如果你是地址的话, 应该不存在符号问题啊? 都应该是无符号的...
现在我有两个int型的数据,想把这两个数据拼接成32位,在32位系统中,通过一个地址下发数据
*(long *)0x0A0000000=(((a[i]<<16)| (b[i]));
这一句编译没有问题,可是调试会有这个问题 [/quote] 直接操作内存啊? 0x0A0000000你直接操作了!? 你用VMMap看一下这个地址内存是不是可以操作. 没有分配就直接操作内存, Access Deny很正常啊.
zhuoxuan216 2013-05-09
  • 打赏
  • 举报
回复
引用 8 楼 youyou1912 的回复:
不过如果你是地址的话, 应该不存在符号问题啊? 都应该是无符号的...

现在我有两个int型的数据,想把这两个数据拼接成32位,在32位系统中,通过一个地址下发数据
*(long *)0x0A0000000=(((a[i]<<16)| (b[i]));

这一句编译没有问题,可是调试会有这个问题

zhuoxuan216 2013-05-09
  • 打赏
  • 举报
回复
引用 14 楼 zwfgdlc 的回复:
[quote=引用 13 楼 zhuoxuan216 的回复:] [quote=引用 12 楼 zwfgdlc 的回复:]

	int a;
	short* b = (short*)&a;
	b[0] = 0xab;
	b[1] = 0xcd;
这样行不行.
不好意思没有看懂,能不能说详细点。谢谢[/quote] 把32位的int当2个16位的数组来处理. 把0xcd放入低16位,把0xab放入高16位. 不知道你是不是这个意思.[/quote] 是这个意思,需要存的两个数都要包括符号位
zwfgdlc 2013-05-09
  • 打赏
  • 举报
回复
引用 13 楼 zhuoxuan216 的回复:
[quote=引用 12 楼 zwfgdlc 的回复:]

	int a;
	short* b = (short*)&a;
	b[0] = 0xab;
	b[1] = 0xcd;
这样行不行.
不好意思没有看懂,能不能说详细点。谢谢[/quote] 把32位的int当2个16位的数组来处理. 把0xcd放入低16位,把0xab放入高16位. 不知道你是不是这个意思.
zhuoxuan216 2013-05-09
  • 打赏
  • 举报
回复
引用 12 楼 zwfgdlc 的回复:

	int a;
	short* b = (short*)&a;
	b[0] = 0xab;
	b[1] = 0xcd;
这样行不行.
不好意思没有看懂,能不能说详细点。谢谢
zwfgdlc 2013-05-09
  • 打赏
  • 举报
回复

	int a;
	short* b = (short*)&a;
	b[0] = 0xab;
	b[1] = 0xcd;
这样行不行.
zhuoxuan216 2013-05-08
  • 打赏
  • 举报
回复
引用 1 楼 chuachua66 的回复:
HIWORD,LOWORD ? >> 16 , << 16 ? 不知道你具体意思。
就是mfc产生的两个int型数据,a[i]和b[i],数据大小都可以用16位数据表示,有正负,想让16位表示符号位,然后想在一个地址0x00010000存放这两个数据,高16位存放a[i],低16位存放b[i].请问应该怎么放。
zhuoxuan216 2013-05-08
  • 打赏
  • 举报
回复
就是mfc产生的两个int型数据,a[i]和b[i],数据大小都可以用16位数据表示,有正负,想让16位表示符号位,然后想在一个地址0x00010000存放这两个数据,高16位存放a[i],低16位存放b[i].请问应该怎么放。
chuachua66 2013-05-08
  • 打赏
  • 举报
回复
HIWORD,LOWORD ? >> 16 , << 16 ? 不知道你具体意思。
youyou1912 2013-05-08
  • 打赏
  • 举报
回复
不过如果你是地址的话, 应该不存在符号问题啊? 都应该是无符号的...
youyou1912 2013-05-08
  • 打赏
  • 举报
回复
引用 6 楼 zhuoxuan216 的回复:
[quote=引用 5 楼 chuachua66 的回复:] a << 16 | b
但是还有符号位,应该怎么解决呢[/quote] 从二进制角度看, 不存在符号概念. 符号取决于你是否用有符号还是无符号接住.
typedef unsigned long DWORD;
因为DWORD是无符号的, 你最好直接用long来接.
short a;
short b;
long c = a << 16 | b
zhuoxuan216 2013-05-08
  • 打赏
  • 举报
回复
引用 5 楼 chuachua66 的回复:
a << 16 | b
但是还有符号位,应该怎么解决呢
chuachua66 2013-05-08
  • 打赏
  • 举报
回复
a << 16 | b
chuachua66 2013-05-08
  • 打赏
  • 举报
回复
DWORD a = MAKELONG(a,b);

2,641

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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