如何求unsigned char*的长度呢?

strlen(const char)只能求得类型为 const char的长度, 但是通常存储字节时,用unsigned char类型, 那么如何获取unsigned char类型的长度呢?

强转为 const char*后虽然可以用 strlen()获取,但是也改变了存储的字节内容。

阅读 9.2k
2 个回答

首先,把 unsigned char* 转成 char* 并不会改变存储的字节内容,数据是不变的,你的指针仅仅是告诉程序该如何对待这些数据。
强转成 const char* 后用 strlen 获取是可行的,前提是你的 unsigned char* 数据中不能有 0,一旦碰到 0,strlen 就会认为字符串结束了。

如果你的数据中可能有 0,你有以下两种选择:
如果你的代码是纯 C 的,那么你只能另外提供一个 length 的参数来表明这个 unsigned char* 数据的长度。
如果你的代码是 C++ 的,你可以直接把数据存储在 std::string 中,string 中是可以有 0 的。

std::string str;
unsigned char data[5] = { 1, 2, 3, 0, 4 };
str.assign((char*)data, 5);
cout << str.size() << endl;

这时候 str.size() 就能取到数据的真实长度

除非很肯定 unsigned char[] 里边存储的就是普通字符串,否则 strlen 也没法保证一定能获取到正确的长度。

一般用 unsigned char 的话,要么带一个 int len 用来表示这个数组的长度,要么直接放在类似 std::vector 的容器里。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏