繁体   English   中英

Java中将变量的值从字符串转换为Long

[英]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.

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