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

标签 c string

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

char all[1500];

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

对于十六进制的部分数据包是这个 474554202f6d61696c2f20485454502f312e310d0a 但是当我们以正常字符查看时是这个 GET/mail/HTTP/1.1\r\n。我的挑战是选择我需要检查是否有 get 或 post 并以 http/1.1 或 http/1.0 结尾的 url?

提取语法

 char *getPointer = strstr (all, "GET"); 
 char *httpPointer = strstr (all, "HTTP/1.");

最佳答案

将字符串 (char *) 转换为二进制 (hex)。十六进制数组将是 char 数组长度的 1/2。使用 strstr () 解析十六进制数组以获取标记(例如“GET”)。到目前为止,您的方法是要走的路。

关于从十六进制转换为普通字符并进行字符串操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20258117/

相关文章:

c - 具有特定地址的指针声明

c - 按字母顺序排列字符串

C++ 字符串溢出

Javascript函数

c - 写入h_addr_list

c - 在 c 中第二次传递后,通过引用传递值不起作用

c - 按核心跟踪线程执行

string - Julia:用分隔符连接字符串(相当于 R 的粘贴)

java - SQL:长比较或字符串,哪个更快

java - 给定一个输入中的两个字符串(用逗号分隔),如何在 Java 中找出字符串 S1 的排列是否等于字符串 S2?