C 从十六进制转换为普通字符并进行字符串操作?

C 从十六进制转换为普通字符并进行字符串操作?,c,string,C,String,我们有一个数据包捕获编程,其中整个数据包由函数中的这个输入常量u_char*p表示。我们已经设法将它从十六进制转换成可读字符。我现在面临的挑战是如何将数据存储到另一个需要进一步字符串处理的数组中?我正在尝试使用这种方法,但不确定这种方法是否正确?但这似乎也不太可能是动态的 char all[1500]; for(i = 0; i < h->caplen; i++) { printf("%02X ", p[i]); printf

我们有一个数据包捕获编程,其中整个数据包由函数中的这个输入常量u_char*p表示。我们已经设法将它从十六进制转换成可读字符。我现在面临的挑战是如何将数据存储到另一个需要进一步字符串处理的数组中?我正在尝试使用这种方法,但不确定这种方法是否正确?但这似乎也不太可能是动态的

char all[1500];

    for(i = 0; i < h->caplen; i++)
    {
          printf("%02X ", p[i]);
          printf("\n");
          sprintf(all,"%02X ",p[i]);
    }

将字符串(字符*)转换为二进制(十六进制)。十六进制数组将是字符数组长度的1/2。使用
strstr()
解析令牌的十六进制数组(例如“GET”)。到目前为止,您的方法是正确的。

将字符串(char*)转换为二进制(hex)。十六进制数组将是字符数组长度的1/2。使用
strstr()
解析令牌的十六进制数组(例如“GET”)。到目前为止,你的方法是正确的。

你能给出一个转换的例子吗?我已经给出了一个我正在研究的完整的例子?那么,你是否得到字符串“47”(0x3437)并将其转换为“G”(0x47)?是的,使用说明符“%02”从“47”转换为“G”。因此,我的挑战是通读整个数组*p并查找url(如果存在)。检查是否存在的规则是检查单词get、post或head是否存在,介于两者之间的是url,以http/1.1或http/1.0结尾。您可以给出一个转换示例吗?我已经给出了一个完整的示例,说明了我正在研究的内容。那么,您是否获得字符串“47”(0x3437)并将其转换为“G”(0x47)?是的说明符为“%02”的“47”到“G”“。因此,我的挑战是通读整个数组*p并查找url(如果存在)。检查是否存在的规则是检查单词get、post或head是否存在,介于两者之间的是url,以http/1.1或http/1.0结尾,因此我的方法到目前为止是正确的谢谢,但我觉得这里有个问题char all[1500];这不是静电的吗?基于此值h->caplen;,这是否也是动态的?那么,我应该传递到strstrstr的是char all数组仪式吗?我想这就是我需要用户strstrstr(all,“GET”)或strstrstr(s1,“POST”)如何提取url(如果存在)?
char all[1500]
是在堆栈上创建的,如果它是局部变量,如果
static
关键字在函数内使用或在函数外定义,则是静态的。如果希望数组大小是动态的,可以使用
malloc()
strstr()
将向子字符串返回一个
char*
,如果它存在于字符串中。使用static与不使用static有什么区别?我认为malloc会很麻烦,因为我需要分配,然后再次发布,我想我会在大数组上创建并离开它。我计划这样做,如果(strstrstr(all,“GET”)!==NULL&&strstrstr(all,“HTTP/1”)),那么我会进行url提取。你说这个方法的逻辑是否正确?如果经常使用,静态可能会更好。你的逻辑听起来不错。你也许可以对它进行优化,但这可能是在你让它工作起来之后。所以我的方法到目前为止是在轨道上的,谢谢你,但我觉得这里有个问题[1500];这不是静电的吗?基于此值h->caplen;,这是否也是动态的?那么,我应该传递到strstrstr的是char all数组仪式吗?我想这就是我需要用户strstrstr(all,“GET”)或strstrstr(s1,“POST”)如何提取url(如果存在)?
char all[1500]
是在堆栈上创建的,如果它是局部变量,如果
static
关键字在函数内使用或在函数外定义,则是静态的。如果希望数组大小是动态的,可以使用
malloc()
strstr()
将向子字符串返回一个
char*
,如果它存在于字符串中。使用static与不使用static有什么区别?我认为malloc会很麻烦,因为我需要分配,然后再次发布,我想我会在大数组上创建并离开它。我计划这样做,如果(strstrstr(all,“GET”)!==NULL&&strstrstr(all,“HTTP/1”)),那么我会进行url提取。你说这个方法的逻辑是否正确?如果经常使用,静态可能会更好。你的逻辑听起来不错。您可能能够对其进行优化,但这可能是在您使其正常工作之后进行的。
 char *getPointer = strstr (all, "GET"); 
 char *httpPointer = strstr (all, "HTTP/1.");