首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >嵌入式NUL和NUL-终止符的区别

嵌入式NUL和NUL-终止符的区别
EN

Stack Overflow用户
提问于 2018-06-10 19:04:22
回答 2查看 86关注 0票数 0

我有一个指向十六进制格式的数据的const char*,我需要找到我正在检查的NUL-terminator的数据长度,但是当\x00出现时,它会检测到当NUL-terminator返回不正确的长度时。

我怎么才能绕开呢?

代码语言:javascript
复制
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;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-10 19:08:27

\x00 的NUL终结者;事实上,\x00只是写\0的另一种方式。

如果您的字节数据包含嵌入的空值,则不能使用NUL作为终止符句号;您必须保持数据的指针和数据大小,就像在“原始字节”(如memcpyfwrite)上操作的函数一样。

至于文字,请确保初始化数组(而不仅仅是接受指向数组的指针),以便能够使用sizeof检索数组的大小。

代码语言:javascript
复制
const char orig[] = "\x09\x00\x04\x00\x02\x00\x10\x00\x42\x00\x02\x00\x01\x80\x0f\x00";

现在您可以使用sizeof(orig)来获取它的大小(这将比显式写入字符的数量长一个,因为后面有隐式NUL终止符);但是要小心,因为数组在几乎所有可用的情况下都会衰减为指针,特别是在传递给函数时。

票数 2
EN

Stack Overflow用户

发布于 2018-06-10 19:09:04

\x表示十六进制符号。

查看一个ASCII表,看看\x00代表什么。

代码语言:javascript
复制
\x00 = NULL // In Hexadecimal notation.

\x00只是编写\0的另一种方式。

试一试

代码语言:javascript
复制
const char orig[] = "\x09\x00\x04\x00\x02\x00\x10\x00\x42\x00\x02\x00\x01\x80\x0f\x00";

代码语言:javascript
复制
len=sizeof(orig)/sizeof(char);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50787121

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档