سؤال

أنا أبحث عن تطبيق CRC32 في C أو C++ المرخص بشكل صريح على أنه بدون تكلفة أو مجال عام.التطبيق هنا يبدو لطيفًا، ولكن الشيء الوحيد الذي يقوله عن الترخيص هو "شفرة المصدر"، وهو ليس جيدًا بما فيه الكفاية.أفضّل استخدام تطبيق غير LGPL لذا لا أضطر إلى التلاعب بملف DLL (تطبيقي مغلق المصدر).لقد رأيت تنفيذ adler32 في zlib، لكنني أتحقق من أجزاء صغيرة من البيانات، والتي لا يناسبها adler.

هل كانت مفيدة؟

المحلول

واستخدم زيادة C ++ المكتبات . هناك CRC شملت هناك وفي رخصة أمر جيد.

نصائح أخرى

ال أرشيف كود مصدر SNIPPETS C لديه تنفيذ CRC32 التي يمكن استخدامها بحرية:

/* Copyright (C) 1986 Gary S. Brown.  You may use this program, or
   code or tables extracted from it, as desired without restriction.*/

(لسوء الحظ، يبدو أن c.snippets.org قد مات.لحسن الحظ، آلة وايباك هل تم أرشفته.)

لتتمكن من تجميع التعليمات البرمجية، ستحتاج إلى إضافة typedefs لـ BYTE كعدد صحيح غير موقع 8 بت و DWORD كعدد صحيح 32 بت غير موقع، إلى جانب ملفات الرأس CRC.h & sniptype.h.

العنصر الوحيد المهم في الرأس هو هذا الماكرو (والذي يمكن أن ينتقل بسهولة إلى CRC_32.c نفسه:

#define UPDC32(octet, crc) (crc_32_tab[((crc) ^ (octet)) & 0xff] ^ ((crc) >> 8))

وأنا مؤلف كتاب شفرة المصدر على الرابط المحدد. في حين أن القصد من رخصة الكود المصدري ليست واضحة (سيكون في وقت لاحق اليوم)، رمز هو في الواقع مفتوحة ومجانية للاستخدام في التطبيقات الخاصة بك مجانية أو تجارية من دون شروط.

ورمز لجنة حقوق الطفل في زليب (http://zlib.net/) هي من بين الأسرع هناك، ولديه رخصة مفتوحة المصدر ليبرالي جدا.

ويجب عدم استخدام أدلر 32 باستثناء التطبيقات الخاصة حيث السرعة هي أكثر أهمية من الأداء اكتشاف الخطأ.

وباستخدام zlib.h ( HTTP: //refspecs.linuxbase.org/LSB_3.0.0/LSB-Core-generic/LSB-Core-generic/zlib-crc32-1.html ):

#include <zlib.h>
unsigned long  crc = crc32(0L, Z_NULL, 0);
crc = crc32(crc, (const unsigned char*)data_address, data_len);

pycrc هو برنامج نصي بلغة Python يقوم بإنشاء رمز C CRC، مع خيارات لتحديد حجم CRC والخوارزمية والنموذج.

تم إصداره بموجب ترخيص MIT.هل هذا مقبول لأغراضك؟

ووC الأكثر بسيطة ومباشرة تنفيذ / C ++ التي وجدت في وصلة في أسفل هذه الصفحة:

وصفحة ويب: HTTP: // شبكة الاتصالات العالمية. barrgroup.com/Embedded-Systems/How-To/CRC-Calculation-C-Code

وكود رابط التحميل: https://barrgroup.com/code/crc.zip

ووهو تطبيق مستقل بسيطة مع .H واحد وملف .C واحد. وهناك دعم لCRC32، CRC16 وCRC_CCITT من خلال استخدام تعريف. أيضا، رمز يتيح إعدادات المعلمة تغيير المستخدم مثل متعدد الحدود CRC، قيمة XOR النهائية / الأولية، والخيارات انعكاس إذا كنت ترغب في ذلك.

لا يعرف رخصة صراحة علاء LGPL أو ما شابه ذلك. لكن الموقع لا يقول انهم وضع التعليمات البرمجية في المجال العام عن أي استخدام. كما يقول ملفات التعليمات البرمجية الفعلية هذا.

ونأمل أن يساعد!

mhash مكتبة يعمل جيدا جدا بالنسبة لي. انه سريع بما فيه الكفاية، ويدعم أنواع متعددة من تجزئة (CRC32، MD5، SHA-1، HAVAL، RIPEMD128، RIPEMD160، TIGER، GOST، وما إلى ذلك). للحصول على CRC32 من سلسلة كنت تفعل شيئا من هذا القبيل:

 MHASH td = mhash_init(MHASH_CRC32);

 if (td == MHASH_FAILED) return -1; // handle failure

 mhash(td, s, strlen(s));

 unsigned int digest = 0; // crc32 will be stored here

 mhash_deinit(td, &digest);

 // do endian swap here if desired

rurban في مفترق SMHasher (وعلى SMHasher الأصلي يبدو التخلي عن) لديها الأجهزة CRC32 الدعم. أضيفت التغييرات قبل الالتزام الأولي، ولكن في محاولة مقارنة وCMakeLists جديدة. النص و القديم واحد ( الذي لا يذكر SSE على الإطلاق).

والخيار الأفضل هو ربما إنتل شوكة زليب بدعم PCLMULQDQ وصفها في <لأ href = "HTTP : //www.intel.com/content/dam/www/public/us/en/documents/white-papers/fast-crc-computation-generic-polynomials-pclmulqdq-paper.pdf "يختلط =" نوفولو noreferrer "> هذه الورقة . هذه المكتبة أيضا لديه SSE 4.2 تحسينات .

إذا كنت لا تحتاج إلى قابلية وكنت على لينكس، يمكنك استخدام تنفيذ نواة (والذي هو الأجهزة تسارع إن وجد): <وأ href = "https://stackoverflow.com/a/11156040/309483 "> https://stackoverflow.com/a/11156040/309483

وجئت عبر هذه المادة مفيدة في تدقيق الحسابات.

و"حساب CRC اختبارية في C ++" في Dr.dobbs الموقع.

http://drdobbs.com/184403658؟pgno=3

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top