

Then you could clean up some of your loops. Right now, it appears to be almost entirely arbitrary, and unrelated to the structure of the code. eg AIVDM,1,1,B,13PRrB0000OvbSNhA9oPbr0<0u,058 The first word AIVDM is the name of the sentence, the last 2 characters are the checksum. The first point would be to fix your indentation. NMEA sentences are split into words separated by a comma, and have a maximum length of 80 characters. Looking at specific details of the code, I see a few things that even if you were going to preserve roughly your current implementation, you could still simplify and clarify. Std::cout << "\ncomputed checksum: " << std::hex << (int)check << "\n"
#Nmea 0183 checksum calculator online serial#
Std::cout << "received checksum: " << received_checksum When NMEA-0183 output is enabled, a subset of NMEA-0183 messages can be output to external instruments and equipment connected to the receiver serial ports. Print out both the received and computed checksums: Save the checksum that was at the end of what we received.Ĭhar check = std::accumulate(sentence.begin()+1, sentence.end(), 0, My immediate reaction would be to write code something like this: #include I believe this can be simplified quite a bit. Ifstream Cheat1("Amateur Hour.txt", ios::in | ios::binary) Ofstream Cheat("Amateur Hour.txt", ios::out | ios::app) Hex Checksum to Binary Conversion (messy, but does the job) Store individual characters in an element of an vector Here's an example of the type of message: !AIVDM,1,1,A,13HOI:0P0000VOHLCnHQKwvL05Ip,0*23 Is there a better way of handling the "Store individual characters in vector" section? I went that way because the message can be of variable size (plus 1 or 2 characters). I tried for a good day to do it with tables etc, but in frustration I ended up going with this. In particular, the hex-to-binary section, the checksum is in hex, and the rest is in ASCII.

I was hoping for a bit of advice on cleaning a couple of areas of this code up.
