0x01 0x23 0x45 。字符串的长度未知。 public void Stringt-6ren">
gpt4 book ai didi

java - ByteArrayOutputStream 的数字字符串

转载 作者:行者123 更新时间:2023-12-02 07:00:43 24 4
gpt4 key购买 nike

在下面的函数中,我遇到了数组越界问题。它应该将数字字符串转换为 BCD 格式,如下所示: "12345"-> 0x01 0x23 0x45 。字符串的长度未知。

public void StringtoBCD(String StringElement)
{
ByteArrayOutputStream in = new ByteArrayOutputStream();
if (!" ".equals(StringElement)){
int i=0;
byte[] tempBCD = StringElement.getBytes();
for (i=0; i<tempBCD.length; i++){
tempBCD[i]=(byte)(tempBCD[i]-0x30);
}
i=0;
if (tempBCD.length %2 !=0){
in.write(0);
}
while(i<tempBCD.length){
in.write((tempBCD[i]<<4)+tempBCD[i+1]);
i=i+2;
}
}
}

我尝试过类似的事情

while(i<tempBCD.length){
in.write((tempBCD[i]<<4)+tempBCD[i+1]);
if (i+3>(tempBCD.length)){
i+= 1;
}
else {
i+=2;
}
}

没有成功。我很确定这很简单,但似乎我在这里监督了一些事情。如有任何帮助,我们将不胜感激:)

最佳答案

这对我来说效果很好。尝试一下;)出于测试目的,我刚刚替换了输出流,重新组织了代码,并在字符串的开头添加了一个“0”(如果字符串的长度为奇数)。

    public void StringtoBCD(String StringElement) {
PrintStream in = System.out;
if(StringElement.length()%2 == 1) {
StringElement= "0"+StringElement;
}
if (!" ".equals(StringElement)){
byte[] tempBCD = StringElement.getBytes();
for (int i=0; i<tempBCD.length; i++){
tempBCD[i]=(byte)(tempBCD[i]-0x30);
}
for(int i = 0; i<tempBCD.length; i=i+2){
in.write((tempBCD[i]<<4)+tempBCD[i+1]);
}
}
in.flush();
}

顺便说一句。如果 StringElement 包含 A 到 F,则此方法不起作用。

关于java - ByteArrayOutputStream 的数字字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16691871/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com