指向c中变量的低字节地址
point to low byte address of variable in c
我想了解这是否可行:
例如:
我们有 long Lvalue = 0xFF00f41a;
还有 int *p;
我们可以指向左值的最后 2 个字节吗
喜欢p=&Lvalue <<16;
p指向第一个16位值这可能吗?
*p --> f41a;
*(p+1) --->0xFF00;
那么如果
p = 0xa011;
long 左值 ---> 0xFF00a011
其实我需要位运算。我有 32 位值,但我只能发送 16 位,如果我更改 16 位,则必须更改 32 位值的前 16 位最后 16 位。
如果您只想要较大的 32 位类型的 16 位,请使用位掩码来完成任务,例如,获取值的低 16 位:
long value = 0xFF00f41a;
long lower = value & 0xFFFF;
要更改值的低 16 位,请使用位操作:
lower = <some thing new>;
value = (value & 0xFFFF0000) | lower;
不要使用指针访问部分 32 位值,当您取消引用它时,它会产生未定义的行为。
如果 int
按 4 字节对齐(这似乎由 gcc
保证,请参阅 Casting an int pointer to a char ptr and vice versa),以下简短示例将起作用:
#include <stdio.h>
int main() {
int v = 0xcafe;
int *ip = &v;
char *cp = (char*) ip;
printf("%hhX\n", *cp); // FE on little-endian box
printf("%hhX\n", *(cp + 1));
*cp = 0xbe;
*(cp + 1) = 0xba;
printf("%X\n", *ip);
return 0;
}
你可以这样保证 int
对齐:
int main() {
__attribute__ ((aligned (4))) int v = 0xcafe;
我想了解这是否可行:
例如:
我们有 long Lvalue = 0xFF00f41a;
还有 int *p;
我们可以指向左值的最后 2 个字节吗
喜欢p=&Lvalue <<16;
p指向第一个16位值这可能吗?
*p --> f41a;
*(p+1) --->0xFF00;
那么如果
p = 0xa011;
long 左值 ---> 0xFF00a011
其实我需要位运算。我有 32 位值,但我只能发送 16 位,如果我更改 16 位,则必须更改 32 位值的前 16 位最后 16 位。
如果您只想要较大的 32 位类型的 16 位,请使用位掩码来完成任务,例如,获取值的低 16 位:
long value = 0xFF00f41a;
long lower = value & 0xFFFF;
要更改值的低 16 位,请使用位操作:
lower = <some thing new>;
value = (value & 0xFFFF0000) | lower;
不要使用指针访问部分 32 位值,当您取消引用它时,它会产生未定义的行为。
如果 int
按 4 字节对齐(这似乎由 gcc
保证,请参阅 Casting an int pointer to a char ptr and vice versa),以下简短示例将起作用:
#include <stdio.h>
int main() {
int v = 0xcafe;
int *ip = &v;
char *cp = (char*) ip;
printf("%hhX\n", *cp); // FE on little-endian box
printf("%hhX\n", *(cp + 1));
*cp = 0xbe;
*(cp + 1) = 0xba;
printf("%X\n", *ip);
return 0;
}
你可以这样保证 int
对齐:
int main() {
__attribute__ ((aligned (4))) int v = 0xcafe;