我有一个指向十六进制格式的数据的const char*,我需要找到我正在检查的NUL-terminator的数据长度,但是当\x00出现时,它会检测到当NUL-terminator返回不正确的长度时。
我怎么才能绕开呢?
const char* orig = "\x09\x00\x04\x00\x02\x00\x10\x00\x42\x00\x02\x00\x01\x80\x0f\x00"
uint64_t get_char_ptr_len(const char *c)
{
uint64_t len = 0;
if (*c)
{
while (c[len] != '\0') {
len++;
}
}
return len;
}发布于 2018-06-10 19:08:27
\x00 是的NUL终结者;事实上,\x00只是写\0的另一种方式。
如果您的字节数据包含嵌入的空值,则不能使用NUL作为终止符句号;您必须保持数据的指针和数据大小,就像在“原始字节”(如memcpy或fwrite)上操作的函数一样。
至于文字,请确保初始化数组(而不仅仅是接受指向数组的指针),以便能够使用sizeof检索数组的大小。
const char orig[] = "\x09\x00\x04\x00\x02\x00\x10\x00\x42\x00\x02\x00\x01\x80\x0f\x00";现在您可以使用sizeof(orig)来获取它的大小(这将比显式写入字符的数量长一个,因为后面有隐式NUL终止符);但是要小心,因为数组在几乎所有可用的情况下都会衰减为指针,特别是在传递给函数时。
发布于 2018-06-10 19:09:04
\x表示十六进制符号。
查看一个ASCII表,看看\x00代表什么。
\x00 = NULL // In Hexadecimal notation.\x00只是编写\0的另一种方式。
试一试
const char orig[] = "\x09\x00\x04\x00\x02\x00\x10\x00\x42\x00\x02\x00\x01\x80\x0f\x00";和
len=sizeof(orig)/sizeof(char);https://stackoverflow.com/questions/50787121
复制相似问题