首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >字符串数组到十六进制数组(Java)

字符串数组到十六进制数组(Java)
EN

Stack Overflow用户
提问于 2012-07-12 09:58:12
回答 3查看 9.3K关注 0票数 4

我有一个字符串数组,它实际上由十六进制字符组成。

假设内容是->

代码语言:javascript
代码运行次数:0
运行
复制
String array[] = {8C,D9,26,1D,69,B7,96,DB};  

现在,我希望将它们解释为每个1字节的十六进制字符,而不是每个条目为2字节的字符串。

代码语言:javascript
代码运行次数:0
运行
复制
StringBuilder output = new StringBuilder();
for (int j = 0; j < array.length; j++) {
        String temp = "\u00"+ array[j];
        output.append(temp);
    }

我尝试过这样的东西,但这是不可能的,因为它一直在抱怨“非法的unicode转义”。我尝试使用"\u00“(即u前面的两个反斜杠,但stackoverflow只显示其中的一个)而不是"\u00”来避免该错误,但随后我在数组中看不到真正的十六进制值,而是看到一堆字符串,如-> "\U008C“、"\U00D9”等等。

我希望转换后的值是0x8C,0xD9,0x26...

谢谢。

编辑:我已经更新了问题,只是为了澄清数组本身中没有逗号。最终,我需要将所有这些值放在一起,并将其用作十六进制字符串而不是文本字符串的HMAC密钥。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-12 10:20:38

让JDK为您完成以下工作:

代码语言:javascript
代码运行次数:0
运行
复制
String[] array = {"8C", "D9", "26", "1D", "69", "B7", "96", "DB"};

StringBuilder output = new StringBuilder();
for ( String hex : array ) {
    output.append( (char)Integer.parseInt( hex, 16 ) );
}

基本上,只需要循环中的那一行就行了。

如果您希望您的输入只是一个大字符串(这看起来更方便),那么只需执行以下操作:

代码语言:javascript
代码运行次数:0
运行
复制
String input = "8CD9261D69B796DB";

StringBuilder output = new StringBuilder();
for ( String hex : input.replaceAll( "..(?!$)", "$0," ).split( "," ) ) {
    output.append( (char)Integer.parseInt( hex, 16 ) );
}

编辑:

如果您想要byte[]结果,请执行以下操作:

代码语言:javascript
代码运行次数:0
运行
复制
String[] array = {"8C", "D9", "26", "1D", "69", "B7", "96", "DB"};

byte[] bytes = new byte[array.length];
for ( int i = 0; i < array.length; i++ ) {
    bytes[i] = (byte)Integer.parseInt( array[i], 16 );
}
票数 4
EN

Stack Overflow用户

发布于 2012-07-12 10:09:32

使用String.split方法拆分,

对于返回的数组中的每个元素,使用datai = "0x“+ datai;

对于数组中的每个元素字符串+= datai

EZ

票数 0
EN

Stack Overflow用户

发布于 2012-07-12 10:10:16

您可以按如下方式拆分:

代码语言:javascript
代码运行次数:0
运行
复制
public static void main(String[] args) {
    String givenString = "8C,D9,26,1D,69,B7,96,DB";
    String[] splitString = givenString.split("[,]");

    for(int index = 0; index < splitString.length; index++){
        System.out.print("0x"+ splitString[index]);
        System.out.print((index == splitString.length - 1) ? "":",");
    }
    System.out.println();

}

为了连接它们,使用StringBuilder或StringBuffer并附加到它,而不是我的System.out语句。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11444072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档