【问题标题】:Converting a small hexadecimal String into a integer将一个小的十六进制字符串转换为整数
【发布时间】:2013-11-25 05:21:38
【问题描述】:

我正在尝试将一小串十六进制数字转换为整数数组,直到现在还不是很成功。我试图在多个网站上找到这样的问题,但大多数人都想出十六进制数字太大,这里不是这种情况。当前代码:

static String decode(String message) {
        int indexC = 0;
        int asciiCode = 0;
        String [] codeArray = message.split(" ");
        int [] asciiArray = new int[4];

        while (indexC < codeArray.length){
            asciiCode = Integer.parseInt(codeArray[indexC]);
            asciiArray[indexC] = asciiCode;
        }
            for (int i = 0; i < asciiArray.length; i++){
        System.out.println(asciiArray[i]);  
            }
    }

我确实得到了 system.out.println 的结果,但不是我期望的 4 个数字,而是打印与我开始时相同的(十六进制)数字(在本例中:44 74 71 20)

我不允许包含额外的库或包,我只能使用我自己创建的代码和类。我的代码的重点是获取十进制值。 println 只是为了检查我得到了什么(但如果有人知道如何正确打印该行,请回复;))。

(更多背景信息:我正在为文本构建一个简单的加密器,我正在开发解码器,我需要将 ascii 值连接到十六进制数字)

【问题讨论】:

  • 这不是完整的代码,只是我认为有点相关的,如果你觉得看到完整的代码有用,我可以上传。
  • 所以解决方案是将“,16”放在我的变量后面。

标签: java integer hex converter decoding


【解决方案1】:

您需要提供带有基数的转换方法Integer.parseInt(String s, int radix),(十六进制为16),因此您需要更改此行

asciiCode = Integer.parseInt(codeArray[indexC]);

asciiCode = Integer.parseInt(codeArray[indexC], 16);

你得到相同数字的原因是因为如果你不提供基数,那么它默认为 10。

【讨论】:

  • 你太棒了,这帮了很多忙……它实际上修复了整个代码!
【解决方案2】:

[I@221a5d08 是数组对象本身的字符串表示形式,而不是数组的内容。

如果要打印其内容,请使用Arrays.toString(int [] a)

System.out.println(Arrays.toString(asciiArray));

如果不允许使用此方法,可以实现一个简单的 for 循环:

for(int i = 0; i < asciiArray.length; i++)
    System.out.print(asciiArry[i]);

【讨论】:

  • 当我这样做时,我收到一条错误消息“无法解析数组”
  • @user2984993 添加导入java.util.Arrays
  • 我很抱歉,但我不能这样做,我只能使用提供的库...我会添加到问题中
  • 由谁提供?那是一个标准的java库
  • @user2984993 如果你不能这样做,则循环遍历数组并打印出值:for (int index = 0; index &lt; asciiArray.length; index++){System.out.println(asciiArray[index]);} 或其他一些变化
【解决方案3】:

您正在打印数组的地址,这是一个常见错误。请改用System.out.println(Arrays.toString(asciiArray))

【讨论】:

  • 当我这样做时,我收到一条错误消息“无法解析数组”
猜你喜欢
  • 2012-09-04
  • 2015-11-29
  • 2017-08-12
  • 2014-12-15
  • 2013-12-07
相关资源
最近更新 更多