Estoy enviando este mensaje: 53010422230205222345 (hexagonal), quiero analizarlo así: 53,01,04, ... y asignar esos valores a una matriz de caracteres para su posterior manipulación.
Actualmente estoy tratando de convertir todo el mensaje de matriz de caracteres con el método ".toCharArray", que pone a cada personaje en su propio elemento, por lo que el siguiente paso tiene que combinar por ejemplo, 5 y 3 a 53, aquí es donde yo estoy atascado .
Si trato:
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[];
}
Recibo mensajes de error para "requerido: char, encontraron: char []".
Y para:
for (int count = 0; count < chMsg.length; count = count + 2){
msg[count1].Msg = chMsg[count] + chMsg[count + 1];
}
Me sale "requerido: char, encontró: int".
Tiene que haber alguna solución más elegante / sencilla de lo que estoy tratando? Si lo que estoy tratando es OK ¿Qué tengo que alterar para que funcione?
A continuación se muestra el código completo con ambos métodos que probé.
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
sostiene Unicode, una matriz de caracteres en el que cada char es 2 bytes, UTF-16 codificado. Así que para las matrices de bytes arbitrarias las dobles de memoria, hay una conversión sin sentido entre algunas de codificación y los bytes. Y esta conversión va a salir mal para UTF-8, que no permitirá que cualquier secuencia de bytes.
Los bytes se puede obtener a través de:
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;
}
Sin embargo, debe ser necesaria una cadena, se podría utilizar:
String s = new String(bytes, "ISO-8859-1");
byte[] bytes = s.getBytes("ISO-8859-1");
La sintaxis char xxx[]
se introdujo en java para ser compatible con C / C ++; en el inicio temprano. Más convencional (y lógica) es char[] xxx
.
= results[]
debe ser simplemente = results