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)
不可以.内存的最小可寻址单位是一个字节(最多),尽管您可以使用获得所需的值
((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可以根据实现进行签名或取消签名.
| 归档时间: |
|
| 查看次数: |
54 次 |
| 最近记录: |