【问题标题】:C++ Hex search in std:string failedstd:string 中的 C++ 十六进制搜索失败
【发布时间】:2012-02-27 21:45:33
【问题描述】:

我有一个标准:字符串。我想找到十六进制的模式“0x789c”。 根据stackoverflow中的另一个线程,我已经这样做了:

int nPosD = buffer.find("\x78\x9C");

尝试过

int nPosD = buffer.find(std::string("\x78\x9C"),2);

不成功!返回 -1!我的模式 0x789c 在我的字符串中!我已经用 HexEdit 软件测试过了。

有人对此有想法吗?

非常感谢:)

最好的问候,

【问题讨论】:

  • 0x789c 在英特尔处理器中是 0x9c 0x78,而不是 0x78 0x9c
  • 应该可以,您确定您的十六进制编辑软件没有以小端(反向字节顺序)显示您的字节吗?
  • 您的第一个错误是将二进制缓冲区写入字符串。 std::string 的目的是存储 text。如果您有二进制数据,请使用std::vector<unsigned char>
  • 是的,这是我的十六进制编辑器中的小端视图!谢谢约阿希姆·伊萨克森!

标签: c++ string stl hex design-patterns


【解决方案1】:
int nPosD = buffer.find(std::string("\x78\x9C"),2);

将从缓冲区中的第 3 个字符(偏移量 2)开始查找字符串“\x78\x9c”。如果它没有出现在该点或之后,它将返回 -1。如果你想从头开始搜索整个字符串,去掉2

【讨论】:

    【解决方案2】:

    以下对我有用:

    char data[] = {'A', 0x78, 0x9C};
    string buffer(data, 3);
    cout << buffer.find("\x78\x9C") << endl;
    

    它应该打印“1”。如果没有初始 A,它也可以工作。您可能将字符串设置错了。它可能在 ascii 中包含 '0x789c' 而不是二进制,在这种情况下你想做find("0x789c")

    【讨论】:

    • 是的,这是我的十六进制编辑器中的小端视图!谢谢约阿希姆·伊萨克森!
    猜你喜欢
    • 2021-06-08
    • 2011-06-01
    • 2022-12-13
    • 2011-12-09
    • 1970-01-01
    • 1970-01-01
    • 2014-07-03
    • 2013-11-05
    • 1970-01-01
    相关资源
    最近更新 更多