我有一个重要的问题:
我需要发送存储在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个字节(十六进制表示)的数据。
非常感谢您花些时间来帮助我!
答案 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")
Integer.parseInt(message, 16)
:16意味着它将尝试从字符串中解析十六进制数byte[]
中。请记住,单个字节最多只能容纳127个。我希望这会有所帮助。
编辑:this question的答案可能会帮助您将结果存储在字节数组中。