gpt4 book ai didi

java - 将包含 NULL 的字节数组转换为字符串

转载 作者:行者123 更新时间:2023-11-30 04:16:20 25 4
gpt4 key购买 nike

到后台:我从 MYSQL 数据库获取一个 byte[] 字符串,如下所示:

s:12:"NUL*NUL_messages"; 

我想将其在 Java 中转换为字符串:

String str = new String(sd);

但现在字符串只包含 10 个字符:

s:12:"*_messages"; 

但它需要有 12 个字符,以便下面的解析工作。有人可以帮我做什么才能不删除“NUL”字节吗?

最佳答案

NULL字符串输出内部代表代码点为零的字符。您的字符串相当于:

String s = "\0*\0_messages";

在 Java 中 \0是不可打印的。然而,字符串保留了它 - 如果您检查字符串的长度,它是 12,而不是 10,尽管当您将字符串输出到控制台时只打印了 10 个字符:

System.err.println(s.length());
System.err.println(s);

打印 ( demo )

12
*_messages

comment: This does not work with the serialized-php-parser

该解析器的问题在于它的 parseString方法第 156 行期望打印字符串的长度与 s:<length>: 中的字符数匹配。构造。自声明<length>是12但实际长度只有10,parseString在第 175..176 行消耗了流中的两个额外字符,破坏了其他所有内容。

如果您想继续使用该解析器,请考虑替换 '\0'在对字符串进行编码之前,使用一些不使用的其他可打印字符(例如下划线)的字符,然后放置 '\0'回到解析的另一边。

关于java - 将包含 NULL 的字节数组转换为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18288113/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com