String naar bytearray converteren

Ik heb de code, het doel is om de string te ontvangen van een comport als: Stel @ 1234567890123456 @ 1234567890123456 @ 1234567890123456 @ 1234567890123456 en vertaal het naar vier byte-arrays byte user1 [16], user2 [16], pass1 [16], pass2 [16] . Hier is de code:

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("");
}

Wanneer ik deze code uitvoer en mijn string door een com port stuur, verwacht ik de uitvoer:

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

En toch ontvang ik

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 antwoord

Waarom? En hoe ontvang ik de gewenste uitvoer? getBytes docs

De functie String member getBytes () zal de string null-beëindigen. Daar moet je ruimte voor toevoegen.

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

Dat zou de slag moeten slaan.

1
toegevoegd
Dank je. Het werkte. Dus, hoe kan ik user1 [17] array afkappen naar user1 [16] nadat ik hem met getBytes heb ingesteld?
toegevoegd de auteur Richard Rast, de bron
Of moet ik een bufferarray [17] maken en vervolgens de eerste 16 elementen van daar naar array [16] schrijven?
toegevoegd de auteur Richard Rast, de bron
Ik denk erover dat ik gewoon kan gebruiken voor (int j = 0; j en het zou werken met 16 elementen
toegevoegd de auteur Richard Rast, de bron