Comments (10)
You could change the initialValue
of that class to 0x1021
, perhaps by subclassing? This is how it is currently defined.
class Crc16Xmodem extends ParametricCrc {
Crc16Xmodem()
: super(
16,
0x1021,
0x0000, // <--- initial value.
0x0000,
inputReflected: false,
outputReflected: false);
}
from crclib.dart.
Perhaps Crc16CcittTrue
is the right one? There are many Crc16 with polynomial of 0x1021. See https://reveng.sourceforge.io/crc-catalogue/16.htm. You may have to try each one of them until you find a match. I'm feeling lucky with that class though.
from crclib.dart.
Tested all and didn't find it
from crclib.dart.
binascii.crc_hqx(data, value)
Compute a 16-bit CRC value of data, starting with value as the initial CRC, and return the result. This uses the CRC-CCITT polynomial x16 + x12 + x5 + 1, often represented as 0x1021. This CRC is used in the binhex4 format.
I don't understand much about this, maybe it will help.
from crclib.dart.
>>> binary_packet = [254, 240, 82, 0, 2, 50, 161, 0, 0, 0, 0, 0, 52, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 187, 46, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 254, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
>>> data = bytes(binary_packet)
>>> import binascii
>>> binascii.crc_hqx(data, 0)
16372
So looks like Crc16Xmodem
is the one?
from crclib.dart.
>>> binary_packet = [254, 240, 82, 0, 2, 50, 161, 0, 0, 0, 0, 0, 52, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 187, 46, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 254, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] >>> data = bytes(binary_packet) >>> import binascii >>> binascii.crc_hqx(data, 0) 16372
So looks like
Crc16Xmodem
is the one?
But it is not the same value as I gave
For example I give your binary_packet
list in python
import binascii
binary_packet = [254, 240, 82, 0, 2, 50, 161, 0, 0, 0, 0, 0, 52, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 187, 46, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 254, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
result = binascii.crc_hqx(bytes(binary_packet), 0x1021)
print(result)
Result is equal to 58817
Same list in JavaScript
let TABLE = [
0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,
0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,
0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,
0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,
0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,
0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,
0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,
0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,
0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,
0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,
0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,
0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,
0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,
0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,
0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,
0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,
0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,
0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,
0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,
0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,
0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,
0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,
0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,
0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,
0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,
0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,
0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,
0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,
0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,
0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,
0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,
0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0
];
const crc16ccitt = defineCrc('ccitt', function(buf, previous) {
let crc = typeof previous !== 'undefined' ? ~~previous : 0xffff;
for (let index = 0; index < buf.length; index++) {
const byte = buf[index];
crc = (TABLE[((crc >> 8) ^ byte) & 0xff] ^ (crc << 8)) & 0xffff;
}
return crc;
});
var binary_packet = [ 254, 240, 82, 0, 2, 50, 161, 0, 0, 0, 0, 0, 52, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 187, 46, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 254, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
result = crc16ccitt(binary_packet, 0x1021)
console.log(result)
Result is 58817
But in dart
import 'package:crclib/catalog.dart';
import 'package:crclib/crclib.dart';
class NoNullSafetyMethods {
static int getCrc16CcittTrue(List<int> listOfNumbers) {
CrcValue z = Crc16CcittTrue().convert(listOfNumbers);
CrcValue r = Crc16Ccitt().convert(listOfNumbers);
CrcValue n = Crc16A().convert(listOfNumbers);
CrcValue o = Crc16Acorn().convert(listOfNumbers);
CrcValue p = Crc16Arc().convert(listOfNumbers);
CrcValue w = Crc16AugCcitt().convert(listOfNumbers);
CrcValue x = Crc16CcittFalse().convert(listOfNumbers);
CrcValue a = Crc16GeniBus().convert(listOfNumbers);
CrcValue b = Crc16Gsm().convert(listOfNumbers);
CrcValue c = Crc16Ibm3740().convert(listOfNumbers);
CrcValue d = Crc16IbmSdlc().convert(listOfNumbers);
CrcValue e = Crc16IsoIec144433A().convert(listOfNumbers);
CrcValue f = Crc16Kermit().convert(listOfNumbers);
CrcValue g = Crc16Mcrf4xx().convert(listOfNumbers);
CrcValue h = Crc16Riello().convert(listOfNumbers);
CrcValue j = Crc16SpiFujitsu().convert(listOfNumbers);
CrcValue l = Crc16Tms37157().convert(listOfNumbers);
CrcValue m = Crc16Xmodem().convert(listOfNumbers);
return int.parse(c.toString());
}
}
void main(List args) async {
List<int> binary_packet = [ 254, 240, 82, 0, 2, 50, 161, 0, 0, 0, 0, 0, 52, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 187, 46, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 254, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
int a = NoNullSafetyMethods.getCrc16CcittTrue(binary_packet);
}
There is no line that translate this to 58817
Is there extra steps that I am missing?.
(I am using the nullsafety
branch)
from crclib.dart.
I see now from your + my example that it is Crc16Xmodem
/Crc16Acorn
.
We are getting different results in python because you use 0
and I use 0x1021
binascii.crc_hqx(bytes(data), 0)
binascii.crc_hqx(bytes(binary_packet), 0x1021)
I am not sure what is the name of the second parameter in my JavaScript example it is called previous.
So in this package by default it is using 0
, is there a way to change it?.
from crclib.dart.
Found it
Line 617 in fd18467
If we change this to 0x1021
we get the 58817.
I can try to create pull request so that users will be able to change this value, tell me what you think.
from crclib.dart.
Normally initial values are either all 0s, or all 1s. For when you need a different initial value, subclassing ParametricCrc
in your own code is more helpful, i.e. not meant for general population.
from crclib.dart.
I have extended ParametricCrc
with the new value
import 'package:crclib/crclib.dart';
class Crc16XmodemWith0x1021 extends ParametricCrc {
Crc16XmodemWith0x1021()
: super(16, 0x1021, 0x1021, 0x0000,
inputReflected: false, outputReflected: false);
}
And now it works.
Thanks for all the help and support.
from crclib.dart.
Related Issues (9)
- Null Safety support HOT 9
- calculated CRC16 ARC HOT 6
- package:crclib/catalog.dart not found HOT 3
- Web Support HOT 1
- BadState with null safety version HOT 2
- Dart CI workflow failed because of no VM image
- Automatically extract parameters from `reveng` catalog HOT 1
- Does the lib support for CRC_16 [ISO3309]? HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from crclib.dart.