繁体   English   中英

在Java中将long值转换为char序列

[英]Convert long value to char sequence in Java

我想很长的价值在这个caluculator转换为字符序列,例如在这里

我真的不知道如何将该值转换为ASCII序列(或者如果它甚至是正确的)。 我认为ASCII值是8位长,这意味着我必须将long值转换为二进制,然后将其拆分为8位块,这是正确的吗?

严格地说,ASCII字符是7位长,我们通常只是在开头添加一个额外的0来获得8位。 ASCII扩展(例如ISO 8859)具有8位长字符。 您链接的计算器似乎正在使用其中一个扩展名。

在Java中,long有64位(其中一个位用于符号),所以你确实可以有8个8位长的字符块。

首先,你必须将你的long转换成一个字节数组 (并非所有这个问题都与这种情况有关,但其中一些是 - 特别是提到ByteBuffer的部分)。

byte[] bytes = ByteBuffer.allocate(8).putLong(someLong).array();

获得数组后,使用简单的强制转换将每个字节转换为char。

编辑:您可以使用java.lang.String(byte [])构造函数,而不是手动转换每个字符。

String str = new String(bytes);

请注意,这将使用平台的默认字符集。 如果不希望这样,您可以使用其中一个也采用字符集的构造函数。

不。 有几种方法可以做到这一点。 一种方法是使用java.math.BigInteger,它有一个名为toByteArray()的方法。 如果它适合您的问题,请尝试它。

尝试使用此代码将long值转换为4-char数组。

//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); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM