【问题标题】:Android: byte array to decimal stringAndroid:字节数组到十进制字符串
【发布时间】:2015-07-13 06:21:29
【问题描述】:

我有一个字节数组,我必须在文本视图中以两种不同的格式打印它: 十六进制字符串 十进制字符串

对于十六进制字符串,我使用这个函数(在 stackoverflow 上找到):

final protected static char[] hexArray = "0123456789ABCDEF".toCharArray();
public static String bytesToHex(byte[] bytes) {
    char[] hexChars = new char[bytes.length * 2];
    for ( int j = 0; j < bytes.length; j++ ) {
        int v = bytes[j] & 0xFF;
        hexChars[j * 2] = hexArray[v >>> 4];
        hexChars[j * 2 + 1] = hexArray[v & 0x0F];
    }
    return new String(hexChars);
}

在将字节数组转换为十进制字符串时,我使用这个:

   BigInteger bi = new BigInteger(value);

                    // Format to decimal
                    String s = bi.toString(); 

对于字节到十六进制的转换,我确信它可以正常工作,但对于字节到十进制字符串的转换,我不太安全..

有没有更好的方法?

EDIT:我想要的输出是每个字节的十进制值

【问题讨论】:

  • 想要的输出到底是什么?一个大的十进制数?还是每个字节的十进制值?
  • @samgak hi :) 我会为每个字节输入一个十进制数 :)

标签: java android type-conversion bytearray


【解决方案1】:

这会将字节数组打印为小数,前导零(就像您的十六进制输出一样)和每个数字后的空格:

final protected static char[] decimalArray = "0123456789".toCharArray();
public static String bytesToDecimal(byte[] bytes) {
    char[] decimalChars = new char[bytes.length * 4];
    for ( int j = 0; j < bytes.length; j++ ) {
        int v = bytes[j] & 0xFF;
        decimalChars[j * 4] = decimalArray[v / 100];
        decimalChars[j * 4 + 1] = decimalArray[(v / 10) % 10];
        decimalChars[j * 4 + 2] = decimalArray[v % 10];
        decimalChars[j * 4 + 3] = ' ';
    }
    return new String(decimalChars);
}

我已将基数从 16 更改为 10,将最大字符数从 2 增加到 3,对应于基数 16 的最大值 FF 和十进制的 255。使用模 10 代替二进制位掩码来屏蔽单个数字,因为位掩码仅适用于 2 的幂,如 16。

【讨论】:

  • 非常感谢 ;) 它完美地工作并解决了我的问题 :)
猜你喜欢
  • 2013-08-09
  • 2013-10-13
  • 1970-01-01
  • 2011-10-01
  • 1970-01-01
  • 2011-10-02
  • 2013-05-29
相关资源
最近更新 更多