我想将 long 值转换为 char 序列,就像这里的计算器一样。
我真的不知道该值如何转换为 ASCII 序列(或者它是否正确)。我认为 ASCII 值是 8 位长,这意味着我必须将长值转换为二进制,然后将其拆分为 8 位块,对吗?
我想将 long 值转换为 char 序列,就像这里的计算器一样。
我真的不知道该值如何转换为 ASCII 序列(或者它是否正确)。我认为 ASCII 值是 8 位长,这意味着我必须将长值转换为二进制,然后将其拆分为 8 位块,对吗?
严格来说,ASCII 字符是 7 位长,我们通常只是在开头添加一个额外0
的字符以获得 8 位。ASCII 扩展(例如 ISO 8859)具有 8 位长字符。您链接的计算器似乎正在使用这些扩展之一。
在 Java 中,long 有 64 位(其中一位用于符号),因此您确实可以拥有 8 块 8 位长字符。
首先,您必须将 long 转换为字节数组(并非所有问题都与这种情况相关,但其中一些问题 - 特别是提到 ByteBuffer 的部分)。
byte[] bytes = ByteBuffer.allocate(8).putLong(someLong).array();
获得数组后,使用简单的强制转换将每个字节转换为字符。
编辑:您可以使用java.lang.String(byte[])构造函数,而不是手动转换每个字符。
String str = new String(bytes);
请注意,这将使用平台的默认字符集。如果这不是可取的,您可以使用也采用字符集的构造函数之一。
没有。有几种方法可以做到这一点。一种方法是使用 java.math.BigInteger,它有一个名为 toByteArray() 的方法。如果它适合您的问题,请尝试一下。
尝试使用此代码将 long 值转换为 4 字符数组。
//convert long to char array
long longValIn = 229902744986400000L;
ByteBuffer bb1 = ByteBuffer.allocate(8);
bb1.putLong(longValIn);
char [] charArr = new char[4];
charArr[0] = bb1.getChar(0);
charArr[1] = bb1.getChar(2);
charArr[2] = bb1.getChar(4);
charArr[3] = bb1.getChar(6);
//convert char array to long
ByteBuffer bb2 = ByteBuffer.allocate(8);
bb2.putChar(0,charArr[0]);
bb2.putChar(2,charArr[1]);
bb2.putChar(4,charArr[2]);
bb2.putChar(6,charArr[3]);
long longValOut = bb2.getLong(0);