如何将\x00视为带有00(双零)的简单六边形字符串?
How to treat x00 as simple hexastring with 00 (double zero)?
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
相关文章:
- 而循环:简单的除法程序输出零,不明白为什么
- 如何将\x00视为带有00(双零)的简单六边形字符串?
- C++警告:双精度除以零
- 为什么使用 int64_t 会产生错误的结果,而双精度则按预期进行简单的整数乘法
- 双倍简单的循环与一个复杂的循环
- C :从双变量的分数部分中删除尾随零
- 2D 矢量数组用零而不是双精度值填充
- 将类中的所有双精度初始化为零
- 在双变量中避免垃圾零值
- 使用定点表示法将双精度转换为字符串,没有尾随零和机智的冲刺
- C++11 标准::to_string(双) - 无尾随零
- 删除双精度变量中的尾随零
- C/FORTRAN将双下溢设置为零
- 如何为大型项目制作一个简单的工具来检测Linux中的双倍空闲或内存溢出
- 双精度为 std::字符串,具有动态精度(无尾随零)
- 在C++中将双阵列初始化为零期间崩溃
- 将双精度转换为具有 n 个小数位的字符串,不带尾随零
- 为什么双空大括号 { { } } 创建一个<double>包含一个元素而不是零元素的 std::initializer_list?
- 为什么 printf 为非零双精度输出零
- 检查双精度何时有效为零