代码之家  ›  专栏  ›  技术社区  ›  Greg

检查二进制字符串长度?

php
  •  7
  • Greg  · 技术社区  · 15 年前

    4 回复  |  直到 15 年前
        1
  •  -7
  •   zvone    15 年前

    字符串(文本数据)的长度由标记结束的空字符的位置决定。 在二进制数据的情况下,NULL可以并且经常位于数据的中间。

    不检查二进制数据的长度。你必须事先知道。在您的例子中,长度是16(字节,而不是位,如果是UUID)。

    就UUID有效性而言,任何16字节的值都是有效的UUID,因此您在那里运气不佳。

        2
  •  22
  •   user1086498 user1086498    13 年前

    看到了吗 http://bytes.com/topic/php/answers/653733-binary-string-length

    相关部分:

    " 在PHP中,与C一样,字符串以零字符“\0”(char)结尾

    不,不是这样的-PHP字符串存储的长度和 “二进制安全”-NUL不终止字符串。

    参见zend.h中zvalue\u值的定义;字符串部分既有“char *“val”和“int len”。

    如果您使用mbstring.func\ u重载,问题就会开始,它会发生变化 strlen()和其他函数如何工作,并尝试将字符串视为 这不是正常的PHP行为。

    答案是strlen应该返回字节数,而不管字符串的内容如何。对于多字节字符串,您得到的字符数是错误的,但字节数是正确的。但是,您需要确定没有使用mbstring重载,这会改变strlen的行为方式。

        3
  •  6
  •   v010dya    11 年前

    $len=strlen(bin2hex($data))/2;
    

    之所以这样做,是因为在十六进制中,您可以保证从中得到的所有字节都有2个字符 bin2hex (即使对于初始二进制0,它也返回两个字符)。

    strlen (毕竟,如果不是绝对必要的话,那么您绝对不应该对大量的数据这样做。

        4
  •  3
  •   31eee384    15 年前

    在php.org上, someone was nice enough to create this function . 只需乘以8,就可以得到该字符串中有多少位,因为函数返回字节。

    推荐文章