【问题标题】:How to encode a single raw byte in the middle of my String literal? (Ex: "aaaXbbb" where X is a raw byte)如何在我的字符串文字中间编码单个原始字节? (例如:“aaaXbbb”,其中 X 是原始字节)
【发布时间】:2014-12-17 07:09:08
【问题描述】:

我想在消息中间编码一个原始字节:

byte SOH = 0x01;
String msg = "8=123" + SOH + "9=234";
System.out.println(msg); => 8=12319=234

这不是我想要的。我想要那里的原始字节!

【问题讨论】:

  • 你明白String里面有一个字符数组,字符和字节不是一回事吧?
  • 是的,但我想要简单的情况,一个字节 => 一个字符。
  • 但是在 Java 中一个字节永远不是一个字符。一个字符总是两个字节。
  • 其实我没看错(虽然你可能会说有些字符是四个字节而不是两个,但char 总是两个)。 getBytes() 没有做你认为的事情。但如果你认为你知道得更多,我会去帮助别人。
  • 一个String在内部存储为一个char[],其中每个char总是占用2个字节的内存。 getBytes() 不会给你这些字节的值。 getBytes() 为您提供Stringbyte[] 编码,使用JVM 上的默认字符集*,通常取决于底层操作系统。例如,"€".getBytes() 在 Mac 和 Windows 计算机上很可能会给出不同的结果,即使 String 在两者上的存储方式相同。 (*字符集基本上只是在char[]byte[] 之间转换的一种方式)

标签: java string unicode binary byte


【解决方案1】:

您可以通过使用 '\' 转义一个字节来对它进行编码。

所以要对字节 0x01 进行编码,您可以这样做:

 String s = "8=123\19=234";

【讨论】:

  • 请注意,这并不是真正对“字节”进行编码 - 它仍在创建一个 16 位 UTF 字符,但这应该满足提问者(可能)想要的要求。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-20
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
  • 2013-05-23
相关资源
最近更新 更多