获取无符号字符的长度*

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而不是指针。

【讨论】:

以上是关于获取无符号字符的长度*的主要内容,如果未能解决你的问题,请参考以下文章

如何初始化无符号字符指针

无符号字符的标准输入

C ++将字符串转换为无符号字符并将其转换回以获取字符串

ifstream::read 不读取无符号字符,即使使用 reinterpret_cast

将 VARIANT 转换为无符号字符数组

无符号字符*图像到 Python