我的问题标题不清楚,抱歉。我试过了;)
"\\000"
)取伪代码:
/* I have a string, and the length in bytes of that string */
char * data = value->bytes;
long length = value->length;
/* I need to use a function, but it doesn't handle embedded nuls */
char * encoded = lib_func_encode(data);
lib_free(encoded); // library function requires a free() routine be called
不起作用,因为库函数只编码data
的第一个块直到第一个nul字节。我可以编写一个相当可怕的循环,一直在data
上调用strlen()并计数直到length
字节已被编码,每次我需要编码更多字节时附加一个"\\0000"
字符串,重新分配一些缓冲区以容纳每个额外的编码数据块。感觉这将是一个很多代码来解决一个相当简单的问题。来自具有split()
(在nul字节上)map()
(对每个块进行编码)和join()
(使用"\\000"
)等概念的语言,我本能地想到了这种方式最干净的解决方案......但是标准C中没有任何东西可以用来做这样的事情。
在虚构的函数式语言中,它可能看起来像:
join("\\000",
map(lambda(chunk){encode(chunk)}, split('\0', data)))
经验丰富的C程序员如何编写我需要编写的例程?
答案 0 :(得分:2)
您可以分多步执行此操作:
答案 1 :(得分:1)
你可以做的简单事情就是replace
null byte
直到最后一个空的长度(字符串终结符)。一旦你替换了nulls
,那么你可以用替换的字符串做你想做的事。