将char*更改为指向偏移的几位

Don*_*ing 0 c arrays byte pointers bit

说我有这个代码:

char  num[2] = {15, 240};
char* p_num;
Run Code Online (Sandbox Code Playgroud)

现在,如果我已经理解了一切正确,那么数组中的位应该像这样对齐:

00001111 11110000
Run Code Online (Sandbox Code Playgroud)

我的问题是:是否有任何可能的方法使指针p_num指向第一个字节中的最后四位,以便在执行此代码时:

printf("%d", *p_num);
Run Code Online (Sandbox Code Playgroud)

会写255吗?

即p_num将指向下面括号所包含的位:

0000[1111 1111]0000
Run Code Online (Sandbox Code Playgroud)

ike*_*ami 6

不可以.内存的最小可寻址单位是一个字节(最多),尽管您可以使用获得所需的值

((num[0] & 0xF) << 4) | ((num[1] >> 4) & 0xF)
Run Code Online (Sandbox Code Playgroud)

例如,

unsigned char num[2] = {15, 240};
unsigned char combined = ((num[0] & 0xF) << 4) | ((num[1] >> 4) & 0xF);
printf("%d\n", (int)combined);
Run Code Online (Sandbox Code Playgroud)

请注意,我曾经unsigned char存储过240,255因为char可以根据实现进行签名或取消签名.