kag*_*san 4 c unsigned bits tcp bit-shift
unsigned char *adata = (unsigned char*)malloc(500*sizeof(unsigned char));
unsigned char *single_char = adata+100;
Run Code Online (Sandbox Code Playgroud)
如何更改single_char中的前四位以表示介于1..10(int)之间的值?
问题来自TCP头结构:
Data Offset: 4 bits
The number of 32 bit words in the TCP Header. This indicates where
the data begins. The TCP header (even one including options) is an
integral number of 32 bits long.
Run Code Online (Sandbox Code Playgroud)
通常它的值为4..5,char值类似于0xA0.
这些假设您已将*single_char初始化为某个值.否则,解决方案caf发布了你需要的东西.
(*single_char) = ((*single_char) & 0xF0) | val;
(*single_char) & 11110000 - 将低4位重置为0| val - 将最后4位设置为值(假设val <16)如果要访问最后4位,可以使用
unsigned char v = (*single_char) & 0x0F;
如果你想访问更高的4位,你可以将掩码向上移动4即.
unsigned char v = (*single_char) & 0xF0;
并设置它们:
(*single_char) = ((*single_char) & 0x0F) | (val << 4);
这将设置*single_char数据偏移的高4位,并清除低4位:
unsigned data_offset = 5; /* Or whatever */
if (data_offset < 0x10)
*single_char = data_offset << 4;
else
/* ERROR! */
Run Code Online (Sandbox Code Playgroud)