【问题标题】:Help typecasting a String Array of bytes to actual bytes帮助将字节字符串数组类型转换为实际字节
【发布时间】:2011-10-04 02:56:39
【问题描述】:

我有一个如下所示的字符串:["1011000", "1000010", "1001101", "1000011"]。

我的论点来自其他地方,所以它需要这样。

我需要把它转换成一个真正的字节数组。

这是我的方法:

public void send(String[] payloadarr)  throws IOException { 
    byte [] payload = {};

    for (int i = 0; i < payloadarr.length; i++) {
        byte x = (byte) payloadarr[i];
        payload[i] = x;
    }
    //do byte stuff with payload
}

但是,它不起作用。抱怨不可转换的类型 String 到 byte。

任何人都可以帮助我进行这种类型转换吗?

【问题讨论】:

  • 您尝试了吗,String.getBytes()String.getBytes(ENCODING)?我发表评论是因为我不了解您的要求。
  • 你的意思是你有一个array字符串吗?
  • 这可能是错误的答案。这些字符串看起来非常像它们旨在作为字节的 base-2 数字表示。是的 - payloadarr 是一个字符串数组。
  • 顺便说一句:这不是类型 casting 而是类型转换,或者更好的数据解析。

标签: java type-conversion


【解决方案1】:

已编辑:感谢@Gabe 提出将Integer.parseInt 更改为Byte.parseByte 的想法

您可以使用Byte.parseByte(String s, int radix) - 您的基数是2(即基数2)

这是一个将字符串数组转换为byte[]的便捷方法:

public static byte[] stringsToBytes(String[] payloadarr) {
    byte[] payload = new byte[payloadarr.length];
    for (int i = 0; i < payloadarr.length; i++) {
        payload[i] = Byte.parseByte(payloadarr[i], 2);
    }
    return payload;
}

public static void main(String[] args) {
    System.out.println(Arrays.toString(stringsToBytes(new String[] { "1011000", "1000010", "1001101", "1000011" })));
}

输出:

[88, 66, 77, 67]

【讨论】:

  • 非常感谢您的快速回复!它就像一个魅力
  • @brian:如果您的问题解决了,请接受最佳答案(答案旁边有一个“接受”按钮供您使用)。
【解决方案2】:

从你的问题很难看出,但听起来你真的很想要

byte x = Byte.parseByte(payloadarr[i], 2);

【讨论】:

  • 这是最好的答案。看起来其他提供答案的人没有意识到 Byte.parseByte() 存在。这避免了强制转换,虽然解析为 int 然后进行缩小强制转换确实使用符号位做正确的事情,但当他们发现新人时可能会有点惊讶,例如Integer.parseInt("11011011")==219 但 (byte)Integer.parseInt("11011011")==-37.
  • @prodicus:更不用说哪个(byte)Integer.parseInt("100000000")返回0而不是抛出异常!
【解决方案3】:

您不能使用(仅)类型转换来做到这一点。

您需要使用Integer.parseInt(String, int),其中int 为2。这将为您提供int,您需要将其转换为byte

public void send(String[] payloadarr)  throws IOException { 
    byte [] payload = new byte[payloadarr.length];

    for (int i = 0; i < payloadarr.length; i++) {
        payload[i] = (byte) Integer.parseInt(payloadarr[i], 2);
    }
    //do byte stuff with payload
}

注意事项

  • 如果payloadarr的任何组成部分不是二进制字符串,上述方法将抛出NumberFormatException

  • 我修复了payload的初始化...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多