【问题标题】:Prepend a byte to a byte array将字节添加到字节数组
【发布时间】:2012-07-04 03:28:18
【问题描述】:

我需要在字节数组的开头添加字符串“00”或字节 0x00?我尝试使用 for 循环来实现,但是当我将其转换为十六进制时,它不会出现在前面。

【问题讨论】:

  • 如果它实际上是 byte[],您可以使用 Arrays.copy(...) 用原始数组填充槽 1-(n+1),然后用 0x00 填充槽 0。跨度>

标签: java


【解决方案1】:

字符串“00”在转换为字节时与数字 0x00 不同。您尝试添加到字节数组的数据类型是什么?假设它是字符串“00”的字节表示,请尝试以下操作:

bytes[] orig = <your byte array>;  
String prepend = "00";  
bytes[] prependBytes = prepend.getBytes();  
bytes[] output = new Bytes[prependBytes.length + orig.length];

for(i=0;i<prependBytes.length;i++){
    output[i] = prependBytes[i];
}

for(i=prependBytes.length;i<(orig.length+prepend.lenth);i++){
  output[i] = orig[i];
}

或者您可以使用 Arrays.copy(...) 而不是前面提到的两个 for 循环来进行前置。见How to combine two byte arrays

或者,如果您尝试在字节数组中添加 0,请按以下方式声明 prependBytes 并使用相同的算法

byte[] prependBytes = new byte[]{0,0};

您还说您正在将字节数组转换为十六进制,这可能会截断前导零。要对此进行测试,请尝试在前面添加以下内容并转换为十六进制,看看是否有不同的输出:

byte[] prependBytes = new byte[]{1,1};

如果它正在删除您想要的前导零,您可能希望将您的十六进制数字转换为字符串并对其进行格式化。

【讨论】:

  • 这不会添加 00,而是将“0303”添加到我所有散列字节的开头。它还首先覆盖散列的字符,我还使用 BigInteger 通过使用 new BigInteger(bytearray).toString(16); 将其从字节转换为字符串;
  • 那是因为 0303 可能是字符串“00”的字节表示。我想我知道你想做什么......我会用我的想法编辑我的答案
  • @italiano40 '这会将“0303”添加到我所有散列字节的开头'。不,它没有,它在开头添加了 0x3030,这是“00”的字节表示,这正是您所要求的。如果你想要的真的是 0x0 0x0,请相应地调整代码。
  • 我认为你的例子有错误。 output[i] = orig[i]; 不应该是 output[i] = orig[i-prependBytes.length]; 以免超出索引范围吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-27
  • 2017-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-25
  • 2017-01-01
相关资源
最近更新 更多