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无符号数组
有什么建议吗? 谢谢
# 1 楼答案
将适用于ASCII字符
# 2 楼答案
说元素“作为数值添加”是错误的。你唯一可以肯定的是,它会以静电电荷的形式添加到内存的八个单元中
如何选择表示这八位(
01100001
)以可视化它们与它们的实际情况几乎没有关系,因此如果选择将它们视为数值,那么您可能会被欺骗,以为它们实际上是数值。(有点像self-fulfilling prophecy (wikipedia)。)但事实上,它们只不过是8个静电电荷,可以用我们喜欢的任何方式来解释。我们可以选择将它们解释为2的补码(
<>在C++中最接近无符号字符的是java中的字节。这是因为这些小数据类型的基本特征是它们有多少位长。C++中的字符是8位长,而爪哇中唯一8位长的字符是字节。p>97
),我们可以选择将它们解释为二进制编码的十进制数(61
),我们可以选择将它们解释为ASCII字符('a'
),我们可以选择将它们解释为x86指令操作码(popa
),列表继续不幸的是,java中的字节往往被视为数字量而不是字符,因此显示字节的工具(如调试器)将它们显示为小数字。但这只是一种任意约定:它们可以像ASCII(8位)字符一样轻松地选择显示字节,然后您将在
byte[] lMessage[4]
中看到实际的“a”所以,不要被工具显示的内容所愚弄,重要的是它是一个8位的量。如果工具显示为97(0x61),那么您知道存储在这8个存储单元中的位模式可以被合理地认为是“a”,因为“a”的ASCII码是97
最后,为了回答您的问题,您需要做的是找到一种方法,将一个由16位unicode字符组成的java字符串转换为一个ASCII字符数组,即java中的字节。您可以尝试以下方法:
或者你可以阅读这个问题的答案:Convert character to ASCII numeric value in java了解更多想法