我想将一个long值转换为一个char序列,就像在这个caluculator here中一样 我真的不知道如何将该值转换为ASCII序列(或者如果它甚至是正确的)。我认为ASCII值是8位长,这意味着我必须将长值转换为二进制,然后将其拆分为8位块,这是正确的吗?
答案 0 :(得分:3)
严格来说,ASCII字符长度为7位,我们通常只需在开头添加一个0
即可获得8位。
ASCII扩展(例如ISO 8859)具有8位长字符。您链接的计算器似乎正在使用其中一个扩展程序。
在Java中,long有64位(其中一个位用于符号),所以你确实可以有8个8位长的字符块。
首先,你必须convert your long to a byte array(并非所有这个问题都与这个案例有关,但其中一些是 - 尤其是提到ByteBuffer的部分)。
byte[] bytes = ByteBuffer.allocate(8).putLong(someLong).array();
获得数组后,使用简单的强制转换将每个字节转换为char。
编辑:您可以使用java.lang.String(byte[])构造函数,而不是手动转换每个字符。
String str = new String(bytes);
请注意,这将使用平台的默认字符集。如果不希望这样,您可以使用其中一个也采用字符集的构造函数。
答案 1 :(得分:0)
不。有几种方法可以做到这一点。一种方法是使用java.math.BigInteger,它有一个名为toByteArray()的方法。如果它适合您的问题,请尝试它。
答案 2 :(得分:0)
尝试使用此代码将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);