我正在使用 libpcap(gcc, linux),出于某种原因,我想从 u_char packet[]
中提取数据包长度,并将其保存为整数;说出存储在 packet[38] packet[39]
中的数据包长度。像这样:
#include <stdio.h>
#include <netdb.h>
int main(int argc, char *argv[]) {
u_char packet[2] = {0xaa, 0xfc};
int length = 0xaafc; // how to do that ?
printf("%d\n", length);
}
到目前为止我已经尝试过这个:
#include <stdio.h>
#include <stdlib.h>
#include <netdb.h>
int main(void)
{
u_char packet[2] = {0xaa, 0xfc};
int l = packet[0] | (packet[1]<<8);
printf("%d\n", l);
}
但没有成功!
那么如何在c中实现这一点呢?另外,如果我应该在这里发布整个代码,只需命名它......
谢谢。
最佳答案
您应该转换到 int
在执行左移之前:
int l = packet[0] | (((int)packet[1])<<8);
如果没有这个 Actor ,packet[1]<<8
是 0 - 您采用一个 8 位变量并将其位左移 8 次。您最终会得到 8 个零位。
关于c - 从 libpcap 捕获中提取数据包长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23769700/