[英]Conversion of Variable Value from String to Long in Java
反正在Java中将字符串的值转换为long吗? 显然, String.format("%040x", new BigInteger(1, message.getBytes(message)));
仅更改其格式而不是值。 我需要更改值,因为我将使用转换后的变量进行加密(PRINCE)过程,该过程将以长(十六进制)格式进行处理。
public void onClick(View v, String args)
{
String phoneNo = txtPhoneNo.getText().toString();
String message = txtMessage.getText().toString();
if (phoneNo.length()>0 && message.length()>0){
//prince pri = new prince();
//message = toLong();
String.format("%040x", new BigInteger(1, message.getBytes(message)));
prince.Encrypt (message, k0, kop, k1, t);
sendSMS(phoneNo, message); }
else
Toast.makeText(getBaseContext(),
"Please enter both phone number and message.",
Toast.LENGTH_SHORT).show();
}
您可以Long.parseLong()
使用Long.parseLong()
。
new BigInteger(1, message.getBytes(message))
不起作用。 首先, message.getBytes()
会为未知字符集引发异常。
同样, new BigInteger(1, message.getBytes("UTF-8"))
将为大多数输入返回奇数结果。
我的猜测是您的问题确实是:如何将String转换为字节,然后将其转换为十六进制字符串?
解:
byte[] data = message.getBytes("UTF-8");
从字符串中获取字节数组。 然后,这个问题告诉您如何将其转换为十六进制字符串: 如何在Java中将字节数组转换为十六进制字符串?
人们可能会想到的问题可能更多,因此,我创建了一个使用特定编码的小代码示例(Latin-1,与SMS接受的编码接近),然后返回一个LongBuffer
,其中包含该编码为long
值,使用PKCS#5/7填充。
import java.nio.ByteBuffer;
import java.nio.LongBuffer;
import java.nio.charset.StandardCharsets;
public class TooLong {
private static int PRINCE_BLOCK_SIZE = 64 / Byte.SIZE;
/**
* Converts a message to a LongBuffer that is completely filled.
* Latin encoding and PKCS#7 padding are applied to the message.
* @param message the message
* @return the message as converted
*/
private static LongBuffer messageToLongBuffer(String message) {
byte[] messageData = message.getBytes(StandardCharsets.ISO_8859_1);
int paddingSize = PRINCE_BLOCK_SIZE - messageData.length % PRINCE_BLOCK_SIZE;
ByteBuffer messageBuf = ByteBuffer.allocate(messageData.length + paddingSize);
messageBuf.put(messageData);
for (int i = 0; i < paddingSize; i++) {
messageBuf.put((byte) paddingSize);
}
messageBuf.flip();
return messageBuf.asLongBuffer();
}
public static void main(String[] args) {
String message = "owlstead gets your problem";
LongBuffer messageBuf = messageToLongBuffer(message);
// the long buffer will be completely filled, so you can
// use longBuffer.array() as well if you prefer long[] instead
while (messageBuf.hasRemaining()) {
System.out.printf("%016X ", messageBuf.get());
}
// in case you need it as long[] (flip only needed because of the printf statement before)
messageBuf.flip();
long[] messageData = new long[messageBuf.remaining()];
messageBuf.get(messageData);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.