【问题标题】:Jave (Android): convert byte[] to String, in number formJava (Android):将 byte[] 转换为字符串,以数字形式
【发布时间】:2015-09-04 06:22:08
【问题描述】:

我不熟悉Java语法,这个问题很愚蠢。

我在 C 语言中的目标很简单:

char a[3] = {1, 12, 115};

for{int i = 0; i< 3; i++}
    printf("%1d", (unsigned int)a[i]);

char str[256];

memset(&str[0], 0, 256);


for(int i = 0; i<3; i++){
   int ii;
   ii = strlen(&str[0]);
   sprintf(&str[ii], "%1u", (unsigned int)a[i]);       
}/*for*/

printf("%s", &str[0]);

打印结果为112115

如果我想使用十六进制

只是替换

  sprintf(&str[0], "%1u", (unsigned int)a[i]);

作为

  sprintf(&str[0], "%#1x", (unsigned int)a[i]);

在java中,出于同样的目的,我遇到了麻烦。

有一个 byte[] ,我想将其转换为数字数组,但我没有明确的方法来实现目标。

我找到了一种方法:

String str = new String("");
byte[] a = {1, 12, 115};
for(int i = 0; i< 3; i++){
    str  += Integer.toString(a[i].intValue());
}

这看起来很笨拙。

谁能给我建议?谢谢。

【问题讨论】:

  • 你可能想看看这个:stackoverflow.com/questions/14671594/…
  • 请问,“a[] Array contains char's”是什么意思?我在 JAVA 中很弱...
  • 在这种情况下,将StringBuffer 用于str 以避免创建过多的字符串。 intValue() 在这里没有用,因为字节已经是数字(它们是 8 位整数)。所以str+=Byte.toString(a[i]); 运作良好。所有这一切并不比使用sprintf 及其奇怪的格式语法更奇怪......

标签: java android


【解决方案1】:

您可以像这样将 byte[] 数组转换为字符串:

完成重新编辑:

public static int[] convertToIntArray(byte[] input)
{
    int[] ret = new int[input.length];
    for (int i = 0; i < input.length; i++)
    {
        ret[i] = input[i];
    }
    return ret;
}

以上代码来自:how to convert the byte array into an integer array

然后您可以将整数数组转换为字符串数组:

int[] nums = {5,1,2,11,3}; //List or Vector
Arrays.sort(nums); //Collections.sort() for List,Vector
String a=Arrays.toString(nums); //toString the List or Vector
String ar[]=a.substring(1,a.length()-1).split(", ");
System.out.println(Arrays.toString(ar));

以上代码来自:Converting an int array to a String array

【讨论】:

    【解决方案2】:

    在 java 8 中也不错。

    String str = IntStream.of(1, 12, 115)
        .map((b) -> String.format("%02x", b)
        .collect(Collectors.joining(", "));
    

    虽然:没有 ByteStream。

    较早的java:

    String convert(byte[] a) {
        StringWriter sw = new StringWriter();
        PrintWriter wr = new PrintWriter(sw, true);
        for (int i = 0; i < a.length; i++) {
            wr.printf("%02x, a[i]);
        }
        return sw.toString();
    }
    

    【讨论】:

    • 当你能做到String s = new String(byteArray)时,为什么所有复杂的代码?
    • @TheWrenchintheSystem 他的最后一个示例将字节的十六进制表示形式连接为字符串,类似于 ""1c63"
    • 所以当你传入字节数组时,你得到了 1c63?
    • 哦,是的,看看那个....我不久前在一个网站上读过它,从未测试过......我将编辑或删除
    猜你喜欢
    • 2018-03-27
    • 2015-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-21
    • 1970-01-01
    • 2015-12-02
    • 2013-04-20
    相关资源
    最近更新 更多