[英]How to treat \x00 as simple hexastring with 00 (double zero)?
char a[] = "\x02\x00\x0C\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x03";
我想通過忽略\\x00
作為空終止來將此字符傳遞給某個函數,因此它將其視為具有00
而非空終止的六邊形字符串。 在c中有可能嗎?
我通過它的這個函數是一種測試平台,它會像這樣得到 02000c0800000 ...43。
如果您的問題是如何以符合人體工程學的方式傳遞它,您可以使用支持包含空值的字符序列的容器。
一個這樣的容器是std::string
:
char a[] = "\x02\x00\x0C\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x03";
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>
(未顯示)。
如果您的問題是如何打印十六進制值,包括空值,您可以使用如下嘗試:
char a[] = "\x02\x00\x0C\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x03";
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);
});
輸出是這樣的,它看起來像你的原始字符串:
\x02\x00\x0C\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x03\x00
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.