medium-clone | rigorous exploration of REST architecture
kandi X-RAY | medium-clone Summary
kandi X-RAY | medium-clone Summary
A rigorous exploration of REST architecture modeling the Medium.com API in NodeJS. Minimal libs, no codegen and 99% coverage
Support
Quality
Security
License
Reuse
Top functions reviewed by kandi - BETA
Currently covering the most popular Java, JavaScript and Python libraries. See a Sample of medium-clone
medium-clone Key Features
medium-clone Examples and Code Snippets
Community Discussions
Trending Discussions on medium-clone
QUESTION
I'm working on receiving binary data from sensors for the first time. The data is base64-encoded, I should decode the data and validate it and then save it to the database. One step of the validation process is to check for the CRC-16 validity.
Each payload I receive comes with a CRC code, I have the function that is supposed to calculate the CRC-16 code itself, all I want to know is if it's enough to check that by passing the decoded data to the CRC-16 calculation function and then comparing the result to zero? If it's non-zero, then the data has been corrupted.
If everything went fine, I need unpack the binary data and loop over the result to get the sensors' data such as the battery
and air_temperature
according to specific offset info (according to the manufacturer's documentation). Then save the data as we normally do to the DB.
The problem is: I get non-zero values when I apply the crc16Calc
function to a valid dataset.
Can that be because the CRC is added to the beginning of the data string, not to the end? I mean the structure of the payload is , not the opposite!
My code is:
...ANSWER
Answered 2020-Jul-26 at 15:53Just save the first two bytes, calculate the CRC on the rest, and then compare that to what you saved. That's far and away the most straightforward and most verifiable approach. Not to mention it is a smidge faster than what you want to do (even if you could), since you avoid calculating the CRC on two bytes that you don't need to.
You will get a zero on the whole thing only if the sender appended the CRC bytes to the end, and they appended them in little-endian order.
If you simply cannot resist the siren's call of that lovely algebraic property of the CRC, then move the two bytes to the end, in the proper byte order, and compute the CRC on the message plus CRC. The result should be zero.
Update for example data added to question:
The first two bytes of each 47-byte message is the expected CRC-16/ARC, stored in little-endian order. The approaches given above work as stated, using the 45 bytes after the CRC as the data. The PHP CRC code is correct.
Community Discussions, Code Snippets contain sources that include Stack Exchange Network
Vulnerabilities
No vulnerabilities reported
Install medium-clone
Support
Reuse Trending Solutions
Find, review, and download reusable Libraries, Code Snippets, Cloud APIs from over 650 million Knowledge Items
Find more librariesStay Updated
Subscribe to our newsletter for trending solutions and developer bootcamps
Share this Page