Como converter String para matriz de bytes

Eu tenho o código, o propósito é receber a string de um comport como: Set @ 1234567890123456 @ 1234567890123456 @ 1234567890123456 @ 1234567890123456 e traduzi-lo em matrizes de quatro bytes byte user1 [16], user2 [16], pass1 [16], pass2 [16] . Aqui está o código:

String inString = "";//COM port incoming data buffer

void setup() {
 //put your setup code here, to run once:
  Serial.begin(9600);
  Serial.println("Start");
}

void loop() {
 //put your main code here, to run repeatedly:
 //Receive data from com port
  while (Serial.available() > 0) {
    int inChar = Serial.read();


    if (inChar != '\n') {
      inString += (char)inChar;
    } else {
     //New line
      String Action = inString.substring(0, 3);
      if (Action == "Set") {
        SetCard(inString);
      } else if (Action == "Get") {
        Serial.println("1");
      } else {
        Serial.println(Action);
      }
      inString = "";
    }
  }
}

void SetCard(String Data) {
  Serial.println(Data);
 //Data [email protected]@[email protected]@pass2
 //[email protected]@[email protected]@1234567890123456
  byte user1[16], user2[16], pass1[16], pass2[16];

  String user1str = inString.substring(4, 20);
  String user2str = inString.substring(21, 37);
  String pass1str = inString.substring(38, 54);
  String pass2str = inString.substring(55, 71);

  Serial.println("Strings");
  Serial.println(user1str);
  Serial.println(user2str);
  Serial.println(pass1str);
  Serial.println(pass2str);

  Serial.println("Arrays");
  user1str.getBytes(user1, 16);
  user2str.getBytes(user2, 16);
  pass1str.getBytes(pass1, 16);
  pass2str.getBytes(pass2, 16);


  writeByteArray(user1, 16);
  writeByteArray(user2, 16);
  writeByteArray(pass1, 16);
  writeByteArray(pass2, 16);
}

void writeByteArray(byte array[], int arrlength)
{
  for (int j = 0 ; j < arrlength ; j++) //print the block contents
  {
    Serial.write (array[j]);//Serial.write() transmits the ASCII numbers as human readable characters to serial monitor
  }
  Serial.println("");
}

Quando eu executo este código e envio minha string através de uma porta COM, espero a saída:

Start
[email protected]@[email protected]@1234567890123456
Strings
1234567890123456
1234567890123456
1234567890123456
1234567890123456
Arrays
1234567890123456
1234567890123456
1234567890123456
1234567890123456

E ainda assim eu recebo

Start
[email protected]@[email protected]@1234567890123456
Strings
1234567890123456
1234567890123456
1234567890123456
1234567890123456
Arrays
123456789012345
123456789012345
123456789012345
123456789012345

Why? And how do I receive desired output? getBytes docs

0

1 Respostas

Por quê? E como recebo o resultado desejado? getBytes docs

A função de membro String getBytes () terminará com nulo a cadeia. Você deve adicionar espaço para isso.

  byte user1[17], user2[17], pass1[17], pass2[17];
  ...
  user1str.getBytes(user1, sizeof(user1));
  ...
  Serial.print((char*) user1);

Isso deve fazer o truque.

1
adicionado
Obrigado. Funcionou. Então, como posso truncar a matriz user1 [17] para user1 [16] depois de definir o valor com getBytes?
adicionado o autor Richard Rast, fonte
Ou eu preciso criar uma matriz de buffer [17] e depois gravar os primeiros 16 elementos de lá para array [16]?
adicionado o autor Richard Rast, fonte
Venha para pensar sobre isso eu poderia apenas para (int j = 0; j e funcionaria com 16 elementos
adicionado o autor Richard Rast, fonte