在字符串中搜索十六进制子串

时间:2009-09-28 15:55:41

标签: c++ string find hex substring

我有一个接收二进制数据的套接字,我将该数据转换为字符串,包含值和字符串值。 (例如“0x04,h,o,m,e,......”)

如何在该字符串中搜索十六进制子字符串?

即。我想搜索“0x02,0x00,0x01,0x04”。

我要求cthon版本的python'fooString.find(“\ x02 \ x00 \ x01 \ x04”)'

感谢所有人:)

4 个答案:

答案 0 :(得分:3)

字符串的良好文档在这里:
http://www.sgi.com/tech/stl/basic_string.html

十六进制标记就像Python一样传递(你认为Python从哪里得到了语法) 字符\ x ??是一个单一的十六进制字符。

#include <iostream>
#include <string>


int main()
{
    std::cout << (int)'a' << "\n";
    std::string             x("ABCDEFGHIJKLMNOPabcdefghijklmnop");
    std::string::size_type  f   = x.find("\x61\x62");   // ab


    std::cout << x.substr(f);

    // As pointed out by Steve below.
    //
    // The string for find is a C-String and thus putting a \0x00 in the middle
    // May cause problems. To get around this you need to use a C++ std::string
    // as the value to find (as these can contain the null character.
    // But you run into the problem of constructing a std::string with a null
    //
    // std::string  find("\0x61\0x00\0x62"); // FAIL the string is treated like a C-String when constructing find.
    // std::string  find("\0x61\0x00\0x62",3); // GOOD. Treated like an array.

    std::string::size_type f2 = x.find(std::string("\0x61\0x00\0x62",3));
}

答案 1 :(得分:2)

c ++ String对象中有很多查找选项,比如

查找在字符串(公共成员函数)中查找内容

rfind 在字符串(公共成员函数)中查找最后一次出现的内容

find_first_of 在字符串中查找字符(公共成员函数)

find_last_of 从结尾处查找字符串中的字符(公共成员函数)

find_first_not_of 在字符串中找不到字符

find_last_not_of 从结尾处查找字符串中缺少字符(公共成员函数)

http://www.cplusplus.com/reference/string/string/

转到上面的链接,查看哪些适合您

答案 2 :(得分:0)

也许您可以尝试strstr()或相关功能。或者您可以使用strtok之类的内容来获取分隔符之间的值并自行解码。

答案 3 :(得分:0)

尝试这样的事情:

char find[] = {0x02, 0x04, 0x04, 0x00};
int pos = strstr(inputStr, find);

请记住,0x00为空,即字符串结束。因此,如果您的来源或搜索中包含这些内容,则无法找到您要查找的内容,因为strstr将在第一个空格中停止。