十六进制值textview输入到byte []

时间:2013-05-18 00:25:06

标签: java android textview hex bytearray

我有一个重要的问题:

我需要发送存储在bye [](最多4个字节)中的十六进制值,我在我的Android手机应用程序的textview中输入了该值。

    mSendButton.setOnClickListener(new OnClickListener() { // clickonbutton to send data
        public void onClick(View v) {
            // Send a message using content of the edit text widget
            TextView view = (TextView) findViewById(R.id.edit_text_out); 
            byte[] message = view.getText().toString().getBytes();
            sendMessage(message); // message needs to be a byte []
        }
    });

例如当我输入0x1020并按下发送按钮时我想要一个字节[] = {0x1020}。

toString函数(第5行)将原始传入字节转换为其他值。合法的替代是:

     CharSequence values= view.getText();

重要的是前两个值是0x,之后有2或4个字节(十六进制表示)的数据。

非常感谢您花些时间来帮助我!

2 个答案:

答案 0 :(得分:0)

找到一个执行此操作的库(仅在我的类路径中有10个。当然,您可以找到适合您项目的库):

org.springframework.security.crypto.codec.Hex.decode(someString);

public static byte [] decode(CharSequence s){     int nChars = s.length();

if (nChars % 2 != 0) {
    throw new IllegalArgumentException("Hex-encoded string must have an even number of characters");
}

byte[] result = new byte[nChars / 2];

for (int i = 0; i < nChars; i += 2) {
    int msb = Character.digit(s.charAt(i), 16);
    int lsb = Character.digit(s.charAt(i+1), 16);

    if (msb < 0 || lsb < 0) {
        throw new IllegalArgumentException("Non-hex character in input: " + s);
    }
    result[i / 2] = (byte) ((msb << 4) | lsb);
}
return result;
}

答案 1 :(得分:-1)

  • 使用message.startsWith("0x")
  • 检查字符串是否以“0x”开头
  • 从字符串
  • 中删除前两个字符
  • 使用Integer.parseInt(message, 16):16意味着它将尝试从字符串中解析十六进制数
  • 将结果存储在byte[]中。请记住,单个字节最多只能容纳127个。

我希望这会有所帮助。

编辑:this question的答案可能会帮助您将结果存储在字节数组中。