有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java字符数组与字节数组

关于这一点,我找到了一些答案,但似乎没有一个适用于我的问题

我使用NDK和C++来期望一个1024元素的无符号字符数组,所以我需要用java创建这个参数作为参数。p>

无符号字符数组应同时包含数字和字符

我试过这个:

byte[] lMessage = new byte[1024];
lMessage[4] = 'a'; 

问题是,第四个元素作为数值添加,而不是保留“a”字符

我也试过了

char[] lMessage = new char[1024];
lMessage[4] = 'a'; 

虽然这保留了字符,但它会将数组中的字节数从8复制到16

我需要输出为8位ASCII无符号数组

有什么建议吗? 谢谢


共 (2) 个答案

  1. # 1 楼答案

    将适用于ASCII字符

    lMessage[4] = new String('a').getBytes()[0];
    
  2. # 2 楼答案

    说元素“作为数值添加”是错误的。你唯一可以肯定的是,它会以静电电荷的形式添加到内存的八个单元中

    如何选择表示这八位(01100001)以可视化它们与它们的实际情况几乎没有关系,因此如果选择将它们视为数值,那么您可能会被欺骗,以为它们实际上是数值。(有点像self-fulfilling prophecy (wikipedia)。)

    但事实上,它们只不过是8个静电电荷,可以用我们喜欢的任何方式来解释。我们可以选择将它们解释为2的补码(97),我们可以选择将它们解释为二进制编码的十进制数(61),我们可以选择将它们解释为ASCII字符('a'),我们可以选择将它们解释为x86指令操作码(popa),列表继续

    <>在C++中最接近无符号字符的是java中的字节。这是因为这些小数据类型的基本特征是它们有多少位长。C++中的字符是8位长,而爪哇中唯一8位长的字符是字节。p>

    不幸的是,java中的字节往往被视为数字量而不是字符,因此显示字节的工具(如调试器)将它们显示为小数字。但这只是一种任意约定:它们可以像ASCII(8位)字符一样轻松地选择显示字节,然后您将在byte[] lMessage[4]中看到实际的“a”

    所以,不要被工具显示的内容所愚弄,重要的是它是一个8位的量。如果工具显示为97(0x61),那么您知道存储在这8个存储单元中的位模式可以被合理地认为是“a”,因为“a”的ASCII码是97

    最后,为了回答您的问题,您需要做的是找到一种方法,将一个由16位unicode字符组成的java字符串转换为一个ASCII字符数组,即java中的字节。您可以尝试以下方法:

    String s = "TooManyEduardos";
    byte[] bytes = s.getBytes("US-ASCII");
    

    或者你可以阅读这个问题的答案:Convert character to ASCII numeric value in java了解更多想法