gpt4 book ai didi

java - 如何组合来自同一个字符数组的 2 个值?

转载 作者:行者123 更新时间:2023-11-29 04:08:46 26 4
gpt4 key购买 nike

我正在发送此消息:53010422230205222345(十六进制),我想像这样解析它:53,01,04,... 并将这些值分配给 char 数组以供进一步操作。

目前我正在尝试使用“.toCharArray”方法将整个消息转换为 char 数组,该方法将每个字符放入其自己的元素中,因此下一步必须结合,例如5 和 3 到 53,这是我卡住的地方。

如果我尝试:

for (int count = 0; count < chMsg.length; count = count + 2){
sb.append(chMsg[count]);
sb.append(chMsg[count+2]);

char results[] = sb.toString().toCharArray();
msg[count1].Msg = results[];
}

我收到“required: char, found: char []”的错误。

对于:

for (int count = 0; count < chMsg.length; count = count + 2){
msg[count1].Msg = chMsg[count] + chMsg[count + 1];
}

我得到“required: char, found: int”。

必须有比我正在尝试的更优雅/更简单的解决方案吗?如果我正在尝试的是好的,我必须改变什么才能让它工作?

下面是我尝试过的两种方法的完整代码。

public class MainActivity extends AppCompatActivity {

public String sendMsg;
public StringBuilder builder = new StringBuilder();
public StringBuilder sb = new StringBuilder();

int i;
int count1;

MsgArray msg[] = new MsgArray[sendMsg.length()];
DataClass[] data = new DataClass[arraySize];

@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

CreateArray();

if (sendMsg != ""){
sendMsg = "";
}

sendBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
sendMsg = sendText.getText().toString();
Conversion();
}
});
}

public void CreateArray(){
for (i = 0; i < arraySize; i++) {
data[i] = new DataClass();
}

for (i=0; i < sendMsg.length(); i++){
msg[i] = new MsgArray();
}
}

public void Conversion()
{
count1 = 0;

char[] chMsg = sendMsg.toCharArray();
for (int count = 0; count < chMsg.length; count = count + 2){
sb.append(chMsg[count]);
sb.append(chMsg[count+2]);

char results[] = sb.toString().toCharArray();
msg[count1].Msg = results[];

msg[count1].Msg = chMsg[count] + chMsg[count + 1];
}

if(sendMsg != "")
{
for (int a = 0; a < sendMsg.length(); a = a + 2){
String s = sendMsg.substring(a, a + 2);
int n = Integer.valueOf(s, 16);
builder.append((char)n);
}
recieveText.setText("ASCII = " + builder.toString());
}
}
}

最佳答案

String 包含 Unicode,一个字符数组,其中每个字符都是 2 个字节,UTF-16 编码。因此,对于任意字节数组,内存加倍,某些编码和字节之间存在无意义的转换。对于不允许任何字节序列的 UTF-8,此转换将出错。

您可以通过以下方式获取字节:

byte[] bytes = new byte[chMsg.length / 2];
int byteI = 0;
for (int count = 0; count < chMsg.length; count = count + 2) {
int b = Integer.parseInt(new String(chMsg, count, 2), 16); // 16 for hex
bytes[byteI++] = (byte) b;
}

如果仍然需要一个字符串,可以使用:

String s = new String(bytes, "ISO-8859-1");
byte[] bytes = s.getBytes("ISO-8859-1");

java中引入语法char xxx[]是为了兼容C/C++;在早期开始。更传统(和合乎逻辑)的是 char[] xxx

= results[] 应该只是 = results

关于java - 如何组合来自同一个字符数组的 2 个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56460168/

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