簡體   English   中英

如何將 \\x00 視為帶有 00(雙零)的簡單六邊形字符串?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM