我有一个const char*
指向十六进制格式的数据,我需要查找我正在检查NUL
- 终结符的数据长度,但是当\x00
出现时将其检测为NUL
- 终止符返回不正确的长度
我怎么能解决这个问题?
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;
}
答案 0 :(得分:2)
\x00
是 NUL终止符;事实上,\x00
只是写\0
的另一种方式。
如果你有包含嵌入式NUL的字节数据,则不能使用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终结符);但是要小心,因为数组在几乎所有可用场合都会衰减指针,特别是在传递给函数时。
答案 1 :(得分:0)
var tree;
function setup() {
noCanvas();
tree = new Tree();
tree.addValue(5);
tree.addValue(3);
console.log(tree);
}
function Tree() {
this.root = null;
}
Tree.prototype.addValue = function (val) {
var n = new Node(val);
if (this.root == null) {
this.root = n;
} else {
this.root.addNode(n);
}
}
Tree.prototype.addNode = function (n) {
if (n.value < this.value)
if (this.left == null) {
this.left = n;
} else {
this.left.addNode(n);
}
} else if (n.value > this.value) {
if (this.right == null) {
this.right = n;
} else {
this.right.addNode(n);
}
}
}
function Node(val) {
this.value = val;
this.left = null;
this.right = null;
}
表示十六进制表示法。
查看ASCII table以查看\ x00代表的内容。
\x
\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";