【问题标题】:split a byte array...?拆分一个字节数组...?
【发布时间】:2012-03-23 11:50:46
【问题描述】:

每次遇到值“-15”时,我都想将它放入一个新的字节数组中……我该怎么做?我想我只是累了,越来越困惑和工作了......请帮助......代码如下:

    fileContent = "S107184CB78120EA52S107184CB78120EA57"; 
    int len = fileContent.length(); 
    byte[] data = new byte[len/2]; 
    for (int i = 0; i < len; i += 2) 
    {
        data[i / 2] = (byte) ((Character.digit(fileContent.charAt(i), 16) << 4) + Character.digit(fileContent.charAt(i+1), 16));
    }

这会给我以下信息:[-15, 7, 24, 76, -73, -127, 32, -22, 82, -15, 7, 24, 76, -73, -127, 32, -22, 87]

从这里我想要的是将 -15 到下一个 -15(但不包括它)的每个元素放在一个单独的字节数组中。每次遇到另一个-15时,我都想这样做。我该怎么做?

【问题讨论】:

  • 遍历数组,每次看到-15,创建一个新数组并跟随元素。
  • Splitting a Byte array的可能重复
  • (不是完全相同的副本,但如果 OP 无法调整其中一个答案,他就会遇到更大的问题......)
  • @StephenC 你的意思是 SHE.. 而我现在才看过.. 谁说我不会接受答案?!
  • @StephenC 它也不是重复的......

标签: java split bytearray


【解决方案1】:

假设-15 随机出现,您需要一个动态数组,在java 中是List。 收集完所有元素后,您可以轻松地将 List 转换为数组。

看起来像这样:

String fileContent = "S107184CB78120EA52S107184CB78120EA57";
int len = fileContent.length();
List<Byte[]> arrays = new ArrayList<Byte[]>();
List<Byte> data = new ArrayList<Byte>();
for (int i = 0; i < len; i += 2) {
    byte b = (byte) ((Character.digit(fileContent.charAt(i), 16) << 4) + Character.digit(fileContent.charAt(i + 1), 16));
    if (b == -15) {
        arrays.add(data.toArray(new Byte[data.size()]));
        data.clear();
    }
    data.add(b);
}
arrays.add(data.toArray(new Byte[data.size()]));

请注意,这会创建一个List&lt;Byte[]&gt;,而不是List&lt;byte[]&gt;。我选择这个是因为我可以使用List.toArray() 方法。如果你想要一个List&lt;byte[]&gt;,你需要在 if 块中手动读写data

【讨论】:

  • 抱歉,但您可以使用Arrays.copyOfRange() 更简单有效地执行此操作 - 请参阅前面问题的链接。当然,如果她只是想要一些她可以复制和粘贴的东西,这与 OP 无关。但是还有其他人可能会关心这个。
  • @StephenC 如果我能给你代表发表评论,我会的。好提示!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-04
  • 1970-01-01
  • 2021-12-12
相关资源
最近更新 更多