strlen(const char)只能求得类型为 const char的长度, 但是通常存储字节时,用unsigned char类型, 那么如何获取unsigned char类型的长度呢?
强转为 const char*后虽然可以用 strlen()获取,但是也改变了存储的字节内容。
strlen(const char)只能求得类型为 const char的长度, 但是通常存储字节时,用unsigned char类型, 那么如何获取unsigned char类型的长度呢?
强转为 const char*后虽然可以用 strlen()获取,但是也改变了存储的字节内容。
除非很肯定 unsigned char[] 里边存储的就是普通字符串,否则 strlen 也没法保证一定能获取到正确的长度。
一般用 unsigned char 的话,要么带一个 int len
用来表示这个数组的长度,要么直接放在类似 std::vector 的容器里。
3 回答1.6k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
2 回答2.6k 阅读
1 回答1.1k 阅读✓ 已解决
2 回答619 阅读✓ 已解决
1 回答795 阅读✓ 已解决
1 回答2.1k 阅读
首先,把
unsigned char*
转成char*
并不会改变存储的字节内容,数据是不变的,你的指针仅仅是告诉程序该如何对待这些数据。强转成
const char*
后用 strlen 获取是可行的,前提是你的unsigned char*
数据中不能有 0,一旦碰到 0,strlen 就会认为字符串结束了。如果你的数据中可能有 0,你有以下两种选择:
如果你的代码是纯 C 的,那么你只能另外提供一个 length 的参数来表明这个
unsigned char*
数据的长度。如果你的代码是 C++ 的,你可以直接把数据存储在 std::string 中,string 中是可以有 0 的。
这时候 str.size() 就能取到数据的真实长度