cap*_*him 1 c binary bit-shift
u_char ip_vhl; /* version << 4 | header length >> 2 */
Run Code Online (Sandbox Code Playgroud)
我做不到,这是怎么做到的?你能举例说明如何使用这个字节存储这2个数字,知道每个数字都是4位
如果每个数字是4位,则您将使用该字符的最低8位.在许多情况下,这将是所有的位.
这样做:
ip_vhl = ((version & 15) << 4) | (length & 15);
Run Code Online (Sandbox Code Playgroud)
假设version你想要的是高位,length你想要的是最低位.在& 15确保每个值仅为4位.这个值主要是需要的length,以避免覆盖专用于versionif长度的位大于15.十进制常量15将以十六进制(as 0xf或0x0f)写入很多人,这是一个风格和品味的问题,你发现更清洁.
编写"一个整数,其中n个最右边的位设置为1,而所有其他设置为0"的另一种方法是((1 << n) - 1),因为n = 4我们可以使用((1 << 4) - 1),这当然是评估的15.
您的代码似乎首先分解length并存储,如果这是您想要做的,您应该在将其打包到单个之前执行char,为清楚起见:
length >>= 2; /* Convert from bytes to 32-bit words (or whatever). */
ip_vhl = ((version & 15) << 4) | (length & 15);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1450 次 |
| 最近记录: |