获取无符号字符的长度*
Posted
技术标签:
【中文标题】获取无符号字符的长度*【英文标题】:Get length of unsigned char* 【发布时间】:2020-04-16 16:59:23 【问题描述】:您好,我正在尝试获取 unsigned char* 的长度,它是一个指向数组的指针,这意味着我不能使用 sizeof。我不能将它转换为 char* 然后执行 strlen() ,因为它在字符串的 middel 中包含空字节。还有什么其他方法可以做到这一点?
stream.open("test.txt");
stream.write((char*)c, Length of the string); // How do i find Length of the string
stream.close();
【问题讨论】:
你不能。无论你在哪里得到unsigned char*
,都应该提供引用序列的长度。
您应该能够自己回答这个问题,只需查看最初为您提供此unsigned char*
的代码及其文档。这里没有人知道它是从哪里来的。
如果你只有一个char *
并且字符串可能包含空字符,那么就无法确定它的长度。如果您需要更多帮助,请提交minimal reproducible example。
你怎么知道第一个空字节不是字符串结束的信号?也许这就是字符串的实际结尾!
我有数据的原始大小,不能小于它
【参考方案1】:
tl;dr:你不能。
您好,我正在尝试获取 unsigned char* 的长度
大概是指它指向的数组的长度。
它是一个指向数组的指针,这意味着我不能使用 sizeof。
没错。
我不能将它转换为 char* 然后执行 strlen() ,因为它在字符串的 middel 中包含空字节。
好的,所以它不是一个以 null 结尾的 C 字符串。当您没有通过其他方式存储它时,空终止是计算 C 字符串长度的方法。
还有什么其他方法可以做到这一点?
没有。您必须通过其他方式存储它。例如,用指针传递它。
【讨论】:
【参考方案2】:它是一个指向数组的指针
使用精确的术语:它是指向无符号字符的指针。该 unsigned char 可能是数组的一个元素。
我不能使用 sizeof。 ...它在字符串的中间包含空字节。还有什么其他方法可以做到这一点?
既然你知道有一个数组,解决方法很简单:在数组上使用sizeof
而不是指针。
【讨论】:
以上是关于获取无符号字符的长度*的主要内容,如果未能解决你的问题,请参考以下文章