-1

我有一个重要的问题:

我需要发送一个存储在 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();

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

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

4

2 回答 2

0

找到一个这样做的库(仅在我的类路径中就有 10 个。当然你可以找到一个适合你的项目的库):

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

公共静态字节[] 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;
}
于 2013-05-18T00:43:40.917 回答
-1
  • 检查字符串是否以“0x”开头使用message.startsWith("0x")
  • 从字符串中删除前两个字符
  • 用途Integer.parseInt(message, 16):16 表示它将尝试从字符串中解析十六进制数
  • 将结果存储在byte[]. 请记住,单个字节最多只能容纳 127 个。

我希望这有帮助。

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

于 2013-05-18T00:29:28.873 回答