Java 十六进制值Textview输入到字节[]

Java 十六进制值Textview输入到字节[],java,android,textview,hex,bytearray,Java,Android,Textview,Hex,Bytearray,我有一些重要的问题: 我需要发送一个十六进制值,该值存储在我在android手机应用程序的文本视图中输入的bye[](最大4字节)中 mSendButton.setOnClickListener(new OnClickListener() { // clickonbutton to send data public void onClick(View v) { // Send a message using content of the edit

我有一些重要的问题:

我需要发送一个十六进制值,该值存储在我在android手机应用程序的文本视图中输入的bye[](最大4字节)中

    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个字节(十六进制表示)的数据

非常感谢你抽出时间来帮助我

  • 使用
    message.startsWith(“0x”)
  • 从字符串中删除前两个字符
  • 使用
    Integer.parseInt(message,16)
    :16表示它将尝试解析字符串中的十六进制数
  • 将结果存储在
    字节[]
    中。请记住,单个字节最多只能容纳127个字节
我希望这有帮助


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

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

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

公共静态字节[]解码(字符序列){ int nChars=s.长度()

if(nChars%2!=0){
抛出新的IllegalArgumentException(“十六进制编码字符串必须具有偶数个字符”);
}
字节[]结果=新字节[nChars/2];
对于(int i=0;i结果[i/2]=(字节)((msb)没有迹象表明字符串一定可以使用32位值来表示(如果它是哈希或加密值的输入怎么办?)。此外,您还必须为步骤4“存储结果…”进行编码。int不会本机“存储”在字节[]中真正的Christian Bongiorno,它对我不起作用:输入1234,我得到值4660:(我从未暗示它可以以字节数组的形式存储。我提供了如何开始解决OP问题的说明。@a.student,4660是十进制数字系统中数字0x1234的表示形式。如果它解析4660,则表示它成功。我没有正确理解您的问题吗?嗨,克里斯蒂安,可能吗给我一些下载和添加这些库的参考资料?我对java非常陌生,所以很抱歉。我发现的唯一成功之处是:问题是,你在android上这么做,你不想引入一些严重的依赖性。如果你遵循apache 2.0许可证(或者你可以)然后你可以考虑简单地复制这个代码。它是2个函数。BTW:如果你喜欢我的答案,请投票表决。
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;
}