如何将\x00视为带有00(双零)的简单六边形字符串?

How to treat x00 as simple hexastring with 00 (double zero)?

本文关键字:双零 简单 六边形 字符串 x00      更新时间:2023-10-16
char a[] = "x02x00x0Cx08x00x00x00x00x00x00x00x00x00x00x00x04x03";

我想通过忽略x00作为空终止来将此字符传递给某个函数,因此它将其视为具有00非空终止的六字符串。在c中可能吗?

IM 传递它的这个函数是一种测试平台,它将在其中获得它作为 02000c0800000 ...43 像这样。

如果你的问题是如何以符合人体工程学的方式传递它,你可以使用支持包含空值的字符序列的容器。

一个这样的容器是std::string

char a[] = "x02x00x0Cx08x00x00x00x00x00x00x00x00x00x00x00x04x03";
const std::string s(std::begin(a), std::end(a));

在 C++17 中,std::string_view是另一种传递此内容的便捷方式:

const std::string_view sv{a, std::distance(std::begin(a), std::end(a))};

您也可以以类似的方式使用std::vector<char>(未显示(。

如果您的问题是如何打印十六进制值,包括 null,您可以使用尝试如下内容:

char a[] = "x02x00x0Cx08x00x00x00x00x00x00x00x00x00x00x00x04x03";
std::cout << std::hex << std::uppercase << std::setfill('0');
std::for_each(std::begin(a), std::end(a), 
[](const char c) 
{  
std::cout << "\x" << std::setw(2) << static_cast<int>(c); 
});

输出是这样的,看起来像你的原始字符串:

x02x00x0Cx08x00x00x00x00x00x00x00x00x00x00x00x04x03x00