Crc เครื่องคิดเลข ออนไลน์ ไบนารี ตัวเลือก


การคำนวณ CRC on-line และไลบรารีฟรีบทนำเกี่ยวกับการคำนวณ CRC เมื่อข้อมูลดิจิทัลถูกจัดเก็บหรือเชื่อมต่อข้อมูลอาจเกิดความเสียหายขึ้น นับตั้งแต่เริ่มต้นของวิทยาการคอมพิวเตอร์คนได้รับการคิดวิธีการจัดการกับปัญหาประเภทนี้ สำหรับข้อมูลอนุกรมพวกเขามากับโซลูชันเพื่อแนบบิตพาริตีกับแต่ละไบต์ที่ส่ง กลไกการตรวจจับที่เรียบง่ายนี้จะทำงานถ้าจำนวนบิตแปลก ๆ ในการเปลี่ยนแปลงไบต์ แต่จำนวนของบิตเท็จในหนึ่งไบต์จะไม่ถูกตรวจพบโดยการตรวจสอบความเท่าเทียมกัน เพื่อเอาชนะปัญหานี้ผู้คนค้นหากลไกเสียงทางคณิตศาสตร์เพื่อตรวจจับบิตปลอมจำนวนมาก การคำนวณ CRC หรือการตรวจสอบซ้ำซ้อนของ cyclic เป็นผลมาจากสิ่งนี้ ปัจจุบันการคำนวณ CRC ใช้ในการสื่อสารทุกประเภท ตรวจสอบทั้งหมดที่ส่งผ่านการเชื่อมต่อเครือข่ายด้วย CRC นอกจากนี้แต่ละบล็อกข้อมูลบนฮาร์ดดิสก์ของคุณยังมีค่า CRC อยู่ด้วย คอมพิวเตอร์สมัยใหม่ไม่สามารถทำได้โดยไม่มีการคำนวณ CRC เหล่านี้ เพื่อช่วยให้เห็นว่าทำไมพวกเขาจึงใช้กันอย่างแพร่หลาย คำตอบคือง่ายมีประสิทธิภาพตรวจจับข้อผิดพลาดหลายประเภทและมีความรวดเร็วในการคำนวณโดยเฉพาะอย่างยิ่งเมื่อใช้ชิปฮาร์ดแวร์เฉพาะ เราอาจคิดว่าการใช้ checksum สามารถแทนที่การคำนวณ CRC ที่เหมาะสมได้ การคำนวณ checksum เป็นเรื่องง่ายกว่า แต่ checksums ไม่พบข้อผิดพลาดทั้งหมด ให้ใช้สตริงตัวอย่างและคำนวณ checksum หนึ่งไบต์ สตริงตัวอย่างคือ Lammert ซึ่งแปลงเป็นค่า ASCII 76 97 109 109 101 114 116 ค่า checksum หนึ่งไบต์ของอาร์เรย์นี้สามารถคำนวณได้โดยเพิ่มค่าทั้งหมดหารด้วย 256 และเก็บส่วนที่เหลือไว้ การตรวจสอบที่เกิดขึ้นคือ 210 คุณสามารถใช้เครื่องคิดเลขข้างต้นเพื่อตรวจสอบผลลัพธ์นี้ได้ ในตัวอย่างนี้เราได้ใช้การตรวจสอบแบบยาวหนึ่งไบต์ซึ่งทำให้เรามีค่าต่างๆกัน 256 ค่า การใช้ checksum byte สองชุดจะส่งผลให้ค่า checksum ที่แตกต่างกัน 65,536 ค่าและเมื่อมีการใช้ค่าสี่ไบต์มีค่ามากกว่าสี่พันล้านที่เป็นไปได้ เราอาจสรุปได้ว่าด้วยการตรวจสอบสี่ไบต์โอกาสที่เราอย่างไม่ตั้งใจจะไม่พบข้อผิดพลาดน้อยกว่า 1 ถึง 4 พันล้าน ดูเหมือนจะค่อนข้างดี แต่นี่เป็นเพียงทฤษฎีเท่านั้น ในทางปฏิบัติบิตไม่เปลี่ยนแปลงสุ่มอย่างสิ้นเชิงในระหว่างการสื่อสาร พวกเขามักจะล้มเหลวในการระเบิดหรือเนื่องจากไฟฟ้า spikes สมมุติว่าในตัวอย่างของอาร์เรย์บิตที่มีความสำคัญต่ำสุดของอักขระ L ถูกตั้งไว้และบิตที่สำคัญที่สุดของ charcter จะหายไประหว่างการสื่อสาร เครื่องรับจะเห็นอาร์เรย์ 77 96 109 109 101 114 116 แทนสตริง Mmmert การตรวจสอบสำหรับสตริงใหม่นี้ยังคงเป็น 210 แต่ผลที่ได้คือเห็นได้ชัดว่าผิดเพียงหลังจากที่มีการเปลี่ยนแปลงสองบิต แม้ว่าเราจะใช้เช็คบ็อตยาวสี่ไบต์แล้วก็ตามเราก็ไม่ได้ตรวจพบข้อผิดพลาดในการรับส่งข้อมูลนี้ ดังนั้นการคำนวณ checksum อาจเป็นวิธีง่ายๆในการตรวจจับข้อผิดพลาด แต่ไม่ให้การป้องกันมากกว่าบิตพาริตีโดยขึ้นอยู่กับความยาวของเช็ค ความคิดที่อยู่เบื้องหลังการคำนวณค่าเช็คเป็นเรื่องง่าย ใช้ฟังก์ชัน F (bval, cval) ที่ป้อนข้อมูลหนึ่งไบต์ข้อมูลและตรวจสอบค่าและส่งออกค่าตรวจสอบที่คำนวณใหม่ ในการคำนวณความเป็นจริงการคำนวณตามที่อธิบายไว้ข้างต้นสามารถกำหนดได้ด้วยวิธีนี้ ตัวอย่าง checksum หนึ่งไบต์ของเราอาจถูกคำนวณด้วยฟังก์ชันต่อไปนี้ (ในภาษา C) ที่เราเรียกซ้ำ ๆ สำหรับแต่ละไบต์ในสตริงอินพุต ค่าเริ่มต้นสำหรับ cval คือ 0 แนวคิดที่อยู่เบื้องหลังการคำนวณ CRC คือการดูข้อมูลเป็นเลขฐานสองอันขนาดใหญ่ จำนวนนี้หารด้วยค่าที่กำหนดและส่วนที่เหลือของการคำนวณนี้เรียกว่า CRC การคำนวณในการคำนวณ CRC ในตอนแรกดูเหมือนว่าจะเสียค่าใช้จ่ายจำนวนมาก แต่ก็สามารถทำได้อย่างรวดเร็วหากเราใช้วิธีการเดียวกับที่เรียนในโรงเรียน เราจะเป็นตัวอย่างคำนวณส่วนที่เหลือสำหรับอักขระ m mdashwhich คือ 1101101 ใน binary notationmdashby หารด้วย 19 หรือ 10011 โปรดทราบว่า 19 เป็นเลขคี่ นี่เป็นสิ่งที่จำเป็นอย่างที่เราจะได้เห็นต่อไป โปรดอ่านหนังสือเรียนของคุณเป็นวิธีการคำนวณเลขฐานสองที่นี่ไม่ต่างจากวิธีการทศนิยมที่คุณเรียนรู้เมื่อตอนที่ยังเด็ก มันอาจดูแปลก ๆ นิดหน่อย ข้อสังเกตต่างกันระหว่างประเทศ แต่วิธีการนี้ก็คล้ายกัน ด้วยการคำนวณทศนิยมคุณสามารถตรวจสอบว่า 109 หารด้วย 19 ให้ผลหารจาก 5 และ 14 เป็นส่วนที่เหลือ แต่สิ่งที่เราเห็นในโครงการคือทุกบิตพิเศษเพื่อตรวจสอบค่าใช้จ่ายเพียงหนึ่งการเปรียบเทียบแบบไบนารีและใน 50 กรณีหนึ่งการสกัดฐานสอง คุณสามารถเพิ่มจำนวนบิตของตัวอย่างข้อมูลทดสอบ stringmdashfor เป็น 56 บิตได้หากใช้ค่าตัวอย่าง Lammert mdashand ผลลัพธ์สามารถคำนวณได้จากการเปรียบเทียบไบนารี 56 รายการและค่าเฉลี่ยของการแทนที่ด้วยเลขฐานสอง 28 ตัว นี้สามารถนำมาใช้ในฮาร์ดแวร์โดยตรงกับทรานซิสเตอร์เพียงไม่กี่ที่เกี่ยวข้อง นอกจากนี้อัลกอริทึมซอฟต์แวร์จะมีประสิทธิภาพมาก สำหรับการคำนวณ CRC จะไม่มีการใช้การย่อยสลายตามปกติ แต่การคำนวณทั้งหมดจะทำแบบโมดูล 2 ในสถานการณ์ที่คุณไม่สนใจดำเนินการบิตและในผลการย่อยจะเท่ากับการดำเนินการพิเศษหรือ สิ่งนี้ดูแปลก ๆ ผลที่เหลือมีค่าแตกต่างกัน แต่จากมุมมองด้านพีชคณิตฟังก์ชันการทำงานจะเท่ากัน การอภิปรายเรื่องนี้จะต้องมีความรู้ระดับมหาวิทยาลัยของทฤษฎีฟิลด์เกี่ยวกับพีชคณิตและฉันเดาส่วนใหญ่ของผู้อ่านไม่สนใจในนี้ โปรดดูที่ส่วนท้ายของเอกสารนี้สำหรับหนังสือที่กล่าวถึงรายละเอียดนี้ ขณะนี้เรามีวิธีคำนวณ CRC ซึ่งสามารถใช้งานได้ทั้งฮาร์ดแวร์และซอฟต์แวร์และยังมีความรู้สึกแบบสุ่มมากกว่าการคำนวณการตรวจสอบทั่วไป ถ้าเราเลือก divisormdash19 ใน examplemdashto ของเราเป็นเลขคี่คุณไม่จำเป็นต้องมีคณิตศาสตร์ระดับสูงเพื่อดูว่าข้อผิดพลาดทุกบิตจะถูกตรวจพบ เนื่องจากทุกข้อผิดพลาดบิตจะทำให้การเปลี่ยนแปลงเงินปันผลมีกำลัง 2 ถ้าเช่นบิต n เปลี่ยนแปลงจาก 0 เป็น 1 มูลค่าของเงินปันผลจะเพิ่มขึ้น 2 n ถ้าในอีกบิตหนึ่ง n เปลี่ยนจาก 1 เป็น 0 ค่าของเงินปันผลจะลดลง 2 n เนื่องจากคุณไม่สามารถแบ่งกำลังสองจากจำนวนเลขคี่ส่วนที่เหลือของการคำนวณ CRC จะเปลี่ยนไปและข้อผิดพลาดจะไม่ถูกสังเกต สถานการณ์ที่สองที่เราต้องการตรวจพบคือเมื่อบิตข้อมูลสองชุดมีการเปลี่ยนแปลงข้อมูล นี้ต้องใช้คณิตศาสตร์บางอย่างที่สามารถอ่านได้ในหนังสือ Tanenbaums กล่าวถึงด้านล่าง คุณต้องเลือกตัวหารของคุณอย่างระมัดระวังเพื่อให้แน่ใจว่าระยะห่างระหว่างสองบิตที่ไม่ถูกต้องคุณจะตรวจจับได้เสมอ เป็นที่ทราบกันดีอยู่แล้วว่าค่าที่ใช้กันทั่วไป 0x8005 และ 0x1021 ของการคำนวณ CRC16 และ CRC-CCITT มีผลดีในเรื่องนี้ โปรดทราบว่าค่าอื่น ๆ อาจเป็นไปได้หรือไม่และคุณไม่สามารถคำนวณมูลค่าไขว้ที่เหมาะสมสำหรับการตรวจจับข้อผิดพลาดสองบิตและไม่ได้เป็นเช่นนั้น พึ่งพาการวิจัยทางคณิตศาสตร์ที่กว้างขวางเกี่ยวกับเรื่องนี้ที่ทำเมื่อหลายทศวรรษก่อนโดยนักคณิตศาสตร์ที่มีทักษะสูงและใช้ค่าที่คนเหล่านี้ได้รับ นอกจากนี้ด้วยการคำนวณ CRC ของเราเราต้องการตรวจจับข้อผิดพลาดทั้งหมดที่มีการเปลี่ยนแปลงจำนวนคี่ นี้สามารถทำได้โดยใช้หารด้วยจำนวนคู่ของชุด ใช้คณิตศาสตร์โมดูลัส 2 คุณสามารถแสดงให้เห็นว่าข้อผิดพลาดทั้งหมดที่มีจำนวนบิตแปลก ๆ ถูกตรวจพบ ดังที่ฉันได้กล่าวไว้ก่อนหน้านี้ในคณิตศาสตร์แบบโมดูโล 2 ฟังก์ชันการย่อยจะถูกแทนที่ด้วยเอกสิทธิ์หรือ มีการดำเนินการ XOR ที่เป็นไปได้สี่แบบ เราจะเห็นว่าสำหรับการรวมกันของค่าบิตความแปลกประหลาดของนิพจน์จะยังคงเหมือนเดิม เมื่อเลือกหารด้วยจำนวนบิตของชุดความแปลกของส่วนที่เหลือจะเท่ากับความแปลกประหลาดของ divident ดังนั้นหากความแปลกประหลาดของการจ่ายเงินปันผลมีการเปลี่ยนแปลงเนื่องจากมีการเปลี่ยนแปลงจำนวนคี่ส่วนที่เหลือจะเปลี่ยนไปด้วย ดังนั้นข้อผิดพลาดทั้งหมดที่เปลี่ยนแปลงจำนวนคี่ของบิตจะถูกตรวจพบโดยการคำนวณ CRC ซึ่งทำด้วยตัวหารดังกล่าว คุณอาจได้เห็นว่าค่าหารหารทั่วไป 0x8005 และ 0x1021 มีจำนวนบิตเป็นคี่เสมอและไม่ได้ระบุไว้ที่นี่ เนื่องจากภายในอัลกอริธึมมีบิตพิเศษที่ซ่อนอยู่ 2 16 ซึ่งทำให้ค่าสัมประสิทธิ์ที่ใช้จริง 0x18005 และ 0x11021 ภายในอัลกอริทึม สุดท้าย แต่ไม่น้อยเราต้องการตรวจจับข้อผิดพลาดในการระเบิดทั้งหมดที่มีการคำนวณ CRC ของเราด้วยความยาวสูงสุดที่จะตรวจพบและตรวจพบข้อผิดพลาดในการตรวจพบข้อผิดพลาดทั้งหมดที่มีความน่าจะเป็นสูง ข้อผิดพลาดในการระเบิดเป็นเรื่องปกติธรรมดาในการสื่อสาร เป็นประเภทของข้อผิดพลาดที่เกิดขึ้นเนื่องจากฟ้าผ่าการเปลี่ยนการถ่ายทอด ฯลฯ ในช่วงเวลาเล็ก ๆ บิตทั้งหมดจะถูกกำหนดให้เป็นหนึ่ง เพื่อทำความเข้าใจเรื่องนี้จริงๆคุณจำเป็นต้องมีความรู้เกี่ยวกับพีชคณิตโมดูโล 2 ด้วยเช่นกันดังนั้นโปรดยอมรับว่าด้วยตัวหาร 16 บิตคุณจะสามารถตรวจจับการระเบิดทั้งหมดที่มีความยาวสูงสุด 16 บิตและมีความยาวทั้งหมดที่มีความแน่นอนอย่างน้อย 99.997 . ในวิธีการทางคณิตศาสตร์ที่บริสุทธิ์การคำนวณ CRC จะถูกบันทึกลงเป็นการคำนวณพหุนาม ค่าหารหารส่วนใหญ่มักไม่ได้อธิบายว่าเป็นเลขฐานสอง แต่เป็นพหุนามของคำสั่งบางอย่าง ในชีวิตปกติบางคำหลายคำมักใช้บ่อยกว่าคนอื่น ๆ ทั้งสามใช้ในการคำนวณ CRC ออนไลน์ในหน้านี้คือ CRC16 และ CRCCCITT แบบ 16 บิตและ CRC32 ขนาด 32 บิต หลังนี้น่าจะใช้กันมากที่สุดในขณะนี้เนื่องจากในหมู่ผู้อื่น CRC เป็นเครื่องกำเนิดไฟฟ้าสำหรับการตรวจสอบและรับรองความถูกต้องของเครือข่ายทั้งหมด สำหรับการคำนวณ CRC ทั้งสามประเภทฉันมีไลบรารีซอฟต์แวร์เสรีที่พร้อมใช้งาน โปรแกรมทดสอบสามารถใช้ทดสอบไฟล์หรือสตริงได้โดยตรง นอกจากนี้คุณยังสามารถดูซอร์สโค้ดและรวมขั้นตอน CRC เหล่านี้ไว้ในโปรแกรมของคุณเอง โปรดตระหนักถึงค่าเริ่มต้นของการคำนวณ CRC และการประมวลผลที่จำเป็นที่เป็นไปได้เช่นบิตพลิก หากคุณไม่ทำเช่นนี้คุณอาจได้รับผลลัพธ์ที่แตกต่างจากการใช้งาน CRC อื่น ๆ การประมวลผลทั้งก่อนและหลังการโพสต์จะกระทำในโปรแกรมตัวอย่างดังนั้นจึงไม่ควรทำให้การใช้งานของคุณเองเป็นเรื่องยาก การทดสอบที่ใช้ร่วมกันคือการคำนวณค่า CRC สำหรับสตริง ASCII 123456789 ถ้าผลลัพธ์ของงานประจำของคุณตรงกับผลลัพธ์ของโปรแกรมทดสอบหรือผลลัพธ์ในเว็บไซต์นี้การใช้งานของคุณจะทำงานได้และสามารถทำงานร่วมกับการใช้งานอื่น ๆ ได้มากที่สุด เช่นเดียวกับการอ้างอิงฟังก์ชันพหุนามสำหรับการคำนวณ CRC ที่พบมากที่สุด โปรดจำไว้ว่าคำสั่งที่มีลำดับสูงสุดของ polynomal (x 16 หรือ x 32) ไม่มีอยู่ในการแทนเลขฐานสอง แต่นัยโดยอัลกอริทึมเอง ฟังก์ชันพหุนามสำหรับ CRCsDr. - Ing K. Gorontzi, 2005 บิตอินพุทถูกเลื่อนไปที่ประตู XOR ซ้ายสุด MSB (ซ้ายสุดบิต) ของแต่ละไบต์จะถูกเลื่อนออกไปก่อน flipflop แต่ละอันหมายถึงบิตผลลัพธ์ CRC เดียว flipflop ด้านซ้ายสุดคือ MSB ของ CRC การดำเนินการนี้ไม่จำเป็นต้องเพิ่มข้อความอินพุตแบบอนุกรมด้วยศูนย์ โปรดทราบว่าในกรณีของเรา flipflops จะถูกหักล้างไปเป็นศูนย์ที่จุดเริ่มต้นของการคำนวณ CRC แต่ละครั้ง แสดง VERILOG ที่เรียบง่ายของพหุนามข้างต้นจะปรากฏที่นี่ คุณสามารถคัดลอกซอร์สโค้ดโดยตรงไปยังโค้ดของคุณ (แจกจ่ายภายใต้ LGPL): การใช้งาน C ที่เรียบง่ายของพหุนามข้างต้นจะแสดงในโค้ดต่อไปนี้ นอกจากนี้คุณสามารถคัดลอกตัวอย่างโค้ดต้นฉบับไปยังโค้ดของคุณโดยตรง (แจกจ่ายภายใต้ LGPL): แน่นอนซอฟต์แวร์มีให้ที่นี่โดยไม่มีการรับประกันโดยชัดแจ้งหรือนัยใด ๆ คุณคิดว่าหน้านี้มีประโยชน์บ้างหรือไม่โปรดวางโน้ตไว้ทาง Contact. Purpose วัตถุประสงค์ของ CRCCalculator คือการแสดงค่า CRC-16 และ CRC-32 สำหรับสตริงหรือไฟล์ที่ระบุ (ค่า CRC-32 จะตรงกับที่คำนวณโดย PKZIP) ไฟล์เพิ่มเติม CRC16Dem และ CRC32Dem แสดงวิธีการสร้างโปรแกรมบรรทัดคำสั่งเพื่อคำนวณค่า CRC โปรแกรมบรรทัดคำสั่ง quotCquot ยังมีอยู่ วัสดุและอุปกรณ์ความต้องการของซอฟต์แวร์ Windows 95982000 และ Delphi 34567 (เพื่อคอมไพล์ใหม่) หรือ Linux และ Kylix 3 (เพื่อคอมไพล์ใหม่) ความต้องการฮาร์ดแวร์ความละเอียด VGA คลิกสองครั้งที่ไอคอน CRCCalculator. EXE เพื่อเริ่มต้นโปรแกรม (Windows) หรือเรียกใช้โปรแกรมภายใต้ Linux โดยใช้.CrcCalculator .. ใส่ข้อความในช่องแก้ไข สังเกตค่า CRC-16 และ CRC-32 เป็นทศนิยมหรือเลขฐานสิบหก เลือกแท็บแผ่นงานของไฟล์ คลิกที่ปุ่มอ่านและเลือกไฟล์สังเกตค่า CRC-16 และ CRC-32 เป็นทศนิยมหรือเลขฐานสิบหก ค่าที่คาดไว้ค่า Hex ไม่เปลี่ยนแปลงตามเวอร์ชันของ Delphi แต่ค่าทศนิยมมีไว้เพื่อไม่ได้รับการรับรอง ค่า CRC-16 มีการ unsigned เสมอ แต่เนื่องจากไม่มีจำนวนเต็ม unsigned 4 ไบต์ใน D1-D3 ค่าทศนิยมจะถูกเซ็นชื่อสำหรับ CRC-32 จนถึงรุ่น Delphi 4 ดูการอธิบาย Initialization Methods 1 และ 2 ดู Felipe Rocha Machados ความเห็นเกี่ยวกับการพิมพ์จำนวนเต็ม 32 บิตใน D3 CRC-32s ของไฟล์ abcLower. TXT ABCupper. TXT และ ThisIsAStrtr. TXT ในแฟ้ม CRCDelphi. ZIP ตรงกับค่าข้างต้นซึ่งได้รับการยืนยันใน CRC32Dem. PAS โปรแกรมบรรทัดคำสั่ง: CRC-32 Bytes F ilename -------- -------- ------------------------ 352441C2 3 abcLower. TXT A3830348 3 ABCUpper. TXT 0876633F 16 ข้อควรระวังเรื่องนี้ค่า CRC โดยเฉพาะ CRC-32 เป็น เป็นวิธีที่ดีมากในการตรวจสอบความสมบูรณ์ของไฟล์ ถ้า CRC-32 สำหรับไฟล์ยังคงเหมือนเดิมมีความเป็นไปได้น้อยมากที่ไฟล์มีการเปลี่ยนแปลง - ประมาณ 1 ใน 4 พันล้าน CRC สามารถใช้เป็นเครื่องมือตรวจสอบเบื้องต้นเพื่อค้นหาไฟล์ที่เหมือนกัน ถ้า CRC ของไฟล์สองไฟล์ไม่ตรงกันไฟล์จะไม่เหมือนกัน ซึ่งสามารถใช้เปรียบเทียบไฟล์ภาพได้ ตารางค้นหา วิธีการในการคำนวณ CRCs ของ quothardwarequot เกี่ยวข้องกับการจัดการบิตซึ่งไม่มีประสิทธิผลมากสำหรับการคำนวณซอฟต์แวร์ แทนการคำนวณ CRC แบบทีละบิตตารางการค้นหาองค์ประกอบ 256 รายการสามารถใช้เพื่อดำเนินการเทียบเท่า 8 บิตในแต่ละครั้ง (นี่คือคำอธิบายในคำพูดของ CRT Calculationsquot ใน IEEE Micro มิถุนายน 1983 หน้า 40-50) สำหรับ CRC-16 ตารางการค้นหาประกอบด้วย 256 WORD แบบ 2 ไบต์ (ดูด้านล่างหรือ CRC16.PAS unit สำหรับตารางที่เกิดขึ้นจริงหรือโปรแกรม CRCTable สำหรับคำนวณตารางการค้นหาสำหรับพหุนามเตอร์พหุนามเตอร์ x 16 x 15 x 2 1 1): ตาราง CONST: ARRAY0..255 ของคำ (0000, C0C1, C181,0140, C301,03C0, 0280, C241, C601,06C0,0780, C741,0500, C5C1, C481,0440, CC01,0CC0,0D80, CD41,0F00, CFC1, CE81,0E40,0A00, CAC1, CB81,0B40, C901,09C,0,08080, C841, D801, 18C0,1980, D941,1B00, DBC1, DA81,1A40,1E00, DEC1, DF81,1F40, DD01,1DC0,1C80, DC41,1400, D4C1, D581,1540, D701,17C0,1680, D641, D201,12C0,1380, D341,1100, D1C1, D081,1040, F001,30C0, 3180, F141,3300, F3C1, F281,3240,3600, F6C1, F781,3740, F501, 35C0,3480, F441,3C00, FCC1, FD81, 320, FE41, FA01,3AC0,3B80, FB41,3900, F9C1, F881,3840,2800, E8C1, E981, 2940, EB01,2BC0,2A80, EA41, EE01,2EC0, 2F80, EF41,2D00, EDC1, EC81,2C40, E401,24C0,2580, E541,2700, E7C1, E681,2640,2200, E2C1, E381,2340, E101,21C0,20 80, E041, A001,60C0,6180, A141, 6300, A3C1, A281,6240,6600, A6C1, A781,6740, A501,65C0,6480, A441,6C00, ACC1, AD81,6D40, AF01,6FC0,6E80, AE41, AA01,6AC0, 6B80, AB41,6900, A9C1, A881,6840,7800, B8C1, B981,7940, BB01, 7BC0,7A80, BA41, BE01,7EC0,7F80, BF41,7D00, BDC1, BC81,7C40, B401,74C0,7580, B541,7700, B7C1, B681,7640,7200, B2C1, B381, 7340, B101,71C0,7080, B041,5000,90C1,9181,5140,9301,53C0, 5280,9241,9601, 56C0,5780,9741,5500,95C1,9481,5440,9C01, 5CC0,5D80,9D41,5F00,9FC1,9E81,5E40,5A00,9AC1,9B81,5B40, 9901,59C0,5880,9841,8801,48C0, 4980,8941,4B00,8BC1,8A81, 4A40,4E00,8EC1,8F81,4F40,8D01,4DC0,4C80,8C41,4400,84C1, 8581,4540,8701,47C0,4680,8641,8201,42C0,4380, 8341,4100, 81C1,8081,4040) จากตารางการค้นหาข้างต้นรหัสสำหรับการคำนวณ CRC-16 มีดังต่อไปนี้ (ดูการเริ่มต้นการสรุปข้อมูลด้านล่าง): PROCEDURE CalcCRC16 (p: pbyte nbyte: WORD VAR CRCvalue: WORD) VAR i: WORD q: pByte อัลกอริทึ่มมีดังต่อไปนี้: 1. exclusive หรือไบต์อินพุตพร้อมไบต์ลำดับต่ำของ CRC register เพื่อรับ INDEX 2. เปลี่ยน crc reg หรือ CRC ลงทะเบียนกับเนื้อหาของ TableINDEX 4. ทำซ้ำขั้นตอนที่ 1 ถึง 3 สำหรับไบต์ทั้งหมด BEGIN q: p FOR i: 1 เพื่อ nBYTE ทำ BEGIN CRCvalue: Hi (CRCvalue) XOR ตาราง q XOR LO (CRCvalue) INC (q) END END สำหรับ CRC-32 ตารางการค้นหาประกอบด้วย 256 ไบต์ 4 ไบต์ (ดูหน่วย CRC32.PAS) ค่าคงที่ที่นี่มีไว้สำหรับพหุนามของเครื่องกำเนิดไฟฟ้า CRC-32 ตามที่กำหนดไว้ใน Microsoft Systems Journal, มีนาคม 1995 หน้า 107-108 ตาราง CONST: ARRAY0..255 ของ DWORD (00000000, 77073096, EE0E612C, 990951BA, 076DC419, 706AF48F, E963A535, 9E6495A3, 0EDB8832, 79DCB8A4, E0D5E91E, 97D2D988, 09B64C2B, 7EB17CBD, E7B82D07, 90BF1D91, 1DB71064, 6AB020F2, F3B97148, 84BE41DE, 1ADAD47D, 6DDDE4EB, F4D4B551, 83D385C7, 136C9856, 646BA8C0, FD62F97A, 8A65C9EC, 14015C4F, 63066CD9, FA0F3D63, 8D080DF5, 3B6E20C8, 4C69105E, D56041E4, A2677172, 3C03E4D1, 4B04D447, D20D85FD, A50AB56B, 35B5A8FA, 42B2986C, DBBBC9D6, ACBCF940, 32D86CE3, 45DF5C75, DCD60DCF, ABD13D59, 26D930AC, 51DE003A, C8D75180, BFD06116, 21B4F4B5, 56B3C423, CFBA9599, B8BDA50F, 2802B89E, 5F058808, C60CD9B2, B10BE924, 2F6F7C87, 58684C11, C1611DAB, B6662D3D, 76DC4190, 01DB7106, 98D220BC, EFD5102A, 71B18589, 06B6B51F, 9FBFE4A5, E8B8D433, 7807C9A2, 0F00F934, 9609A88E, E10E9818, 7F6A0DBB, 086D3D2D, 91646C97, E6635C01, 6B6B51F4, 1C6C6162, 856530D8, F26 2004E, 6C0695ED, 1B01A57B, 8208F4C1, F50FC457, 65B0D9C6, 12B7E950, 8BBEB8EA, FCB9887C, 62DD1DDF, 15DA2D49, 8CD37CF3, FBD44C65, 4DB26158, 3AB551CE, A3BC0074, D4BB30E2, 4ADFA541, 3DD895D7, A4D1C46D, D3D6F4FB, 4369E96A, 346ED9FC, AD678846, DA60B8D0, 44042D73, 33031DE5, AA0A4C5F, DD0D7CC9, 5005713C, 270241AA, BE0B1010, C90C2086, 5768B525, 206F85B3, B966D409, CE61E49F, 5EDEF90E, 29D9C998, B0D09822, C7D7A8B4, 59B33D17, 2EB40D81, B7BD5C3B, C0BA6CAD, EDB88320, 9ABFB3B6, 03B6E20C, 74B1D29A, EAD54739, 9DD277AF, 04DB2615, 73DC1683, E3630B12, 94643B84, 0D6D6A3E, 7A6A5AA8, E40ECF0B, 9309FF9D, 0A00AE27, 7D079EB1, F00F9344, 8708A3D2, 1E01F268, 6906C2FE, F762575D, 806567CB, 196C3671, 6E6B06E7, FED41B76, 89D32BE0, 10DA7A5A, 67DD4ACC, F9B9DF6F, 8EBEEFF9, 17B7BE43, 60B08ED5, D6D6A3E8, A1D1937E, 38D8C2C4, 4FDFF252, D1BB67F1, A6BC5767, 3FB506DD, 48B2364B, D80D2BDA, AF0A1B4C, 36034AF6, 41047A60, DF60EFC3, A867DF55, 316E8EEF, 4669BE79, CB61B38C, BC66831A, 256FD2A0, 5268E236, CC0C7795, BB0B4703, 220216B9, 550 5262F, C5BA3BBE, B2BD0B28, 2BB45A92, 5CB36A04, C2D7FFA7, B5D0CF31, 2CD99E8B, 5BDEAE1D, 9B64C2B0, EC63F226, 756AA39C, 026D930A, 9C0906A9, EB0E363F, 72076785, 05005713, 95BF4A82, E2B87A14, 7BB12BAE, 0CB61B38, 92D28E9B, E5D5BE0D, 7CDCEFB7, 0BDBDF21, 86D3D2D4, F1D4E242, 68DDB3F8, 1FDA836E, 81BE16CD, F6B9265B, 6FB077E1, 18B74777, 88085AE6, FF0F6A70, 66063BCA, 11010B5C, 8F659EFF, F862AE69, 616BFFD3, 166CCF45, A00AE278, D70DD2EE, 4E048354, 3903B3C2, A7672661, D06016F7, 4969474D, 3E6E77DB, AED16A4A, D9D65ADC, 40DF0B66, 37D83BF0, A9BCAE53, DEBB9EC5, 47B2CF7F, 30B5FFE9, BDBDF21C, CABAC28A, 53B39330, 24B4A3A6, BAD03605, CDD70693, 54DE5729, 23D967BF, B3667A2E, C4614AB8, 5D681B02, 2A6F2B94, B40BBE37, C30C8EA1, 5A05DF1B, 2D02EF8D) ได้รับการค้นหาดังกล่าวข้างต้น ตารางรหัสสำหรับการคำนวณ CRC-32 มีดังต่อไปนี้: ใช้ CalcCRC32 เป็นขั้นตอนเพื่อให้ CRCValue สามารถส่งผ่านได้ แต่ยังส่งคืน ซึ่งช่วยให้สามารถเรียกใช้ CalcCRC32 ได้หลายครั้งสำหรับการคำนวณ CRC-32 แบบ quotsamequot ขั้นตอนการ CalcCRC32 (p: ไบต์ ByteCount: DWORD VAR CRCValue: DWORD) ต่อไปนี้เป็นเพียงเล็กน้อยคลุมเครือ (แต่รันได้อย่างรวดเร็ว) อัลกอริทึมจะเป็นดังนี้: 1. พิเศษหรือไบต์อินพุตกับไบต์ลำดับต่ำของ CRC ลงทะเบียนเพื่อรับ INDEX 2. เปลี่ยน CRC ลงทะเบียนแปดบิตไปทางขวา 3. exclusive - หรือ CRC register กับเนื้อหา ของ TableINDEX 4. ทำซ้ำขั้นตอนที่ 1 ถึง 3 สำหรับไบต์ทั้งหมด VAR i: DWORD q: BYTE BEGIN q: p FOR i: 0 TO ByteCount-1 DO BEGIN CRC ค่าเริ่มต้น: (CRCvalue SHR 8) XOR ตาราง q XOR (CRCvalue AND 000000FF) INC. (q) END END คุณสามารถส่งผ่านอาร์กิวเมนต์นี้ไปยังรูทีนนี้ได้เนื่องจากพารามิเตอร์ตัวแรกเป็นตัวชี้ สำหรับสตริงให้ส่งต่อที่อยู่ของอักขระตัวแรกเช่น CalcCRC32 (Addr (s1), LENGTH (s), CRC32) เพื่อหลีกเลี่ยงการละเมิดการเข้าถึงใน Delphi 4 (หรือเวอร์ชันที่ใหม่กว่า) ตรวจสอบให้แน่ใจว่ามีความยาว gt0 (Im ไม่แน่ใจว่าทำไม Delphi 3 ไม่ได้บ่น.) ประจำนี้สามารถใช้เพื่อตรวจสอบตารางค่าคงที่ของ CRC32 ยังไม่ได้รับการแก้ไขโดยไม่ได้ตั้งใจ รหัสต่อไปนี้ในการเริ่มต้นของหน่วย CRC32 ตรวจสอบอาร์เรย์ 1024 ไบต์ของ DWORDs: VAR CRC32Table: DWORD BEGIN ตรวจสอบตารางที่ใช้ในการคำนวณ CRCs ไม่ได้ถูกปรับเปลี่ยน ขอบคุณ Gary Williams สำหรับคำแนะนำนี้ Jan. 2003 CRC32Table: FFFFFFFF CalcCRC32 (Addr (table0), SizeOf (table), CRC32Table) CRC32Table: ไม่ใช่ CRC32Table IF CRC32Table 6FCF9E13 จากนั้น THEN ShowMessage (CRC32 ตาราง CRC32 คือ IntToHex (Crc32Table, 8) , คาดว่า 6FCF9E13) END ในการคำนวณ CRC-32 เดียวกันกับที่ใช้ในยูทิลิตี PKZIP ให้เริ่มต้นด้วย CRC ค่าของ FFFFFFFF หลังจากโทรไปที่ CalcCRC32 ข้างต้น (จำนวนครั้งใด ๆ ) การสรุปประกอบด้วยส่วนประกอบ 1 ส่วนของ CRCvalue ซึ่งสามารถคำนวณด้วยนิพจน์ NOT CRCvalue in Delphi ดูรายละเอียดเพิ่มเติมในส่วนถัดไป การเริ่มต้นและการสรุปผล การเริ่มต้นและการสิ้นสุดของการคำนวณ CRC จะเป็นแบบ arbitrary เมื่อหลายปีก่อนเมื่อเริ่มใช้ CRC ครั้งแรกฉันได้ตั้งค่าเริ่มต้นเป็น 0 และไม่มีการสรุป - นี่คือคำสั่ง Metquot 1 ที่อธิบายไว้ข้างต้นภายใต้ค่าที่คาดว่าจะได้ CRC16: 0 IF LENGTH (s) 0 หลีกเลี่ยงการละเมิดการเข้าถึงใน D4 THEN CalcCRC16 (Addr (s1), LENGTH (s), CRC16) CRC-32 (ที่ใช้โดย PKZIP) เริ่มต้นด้วย FFFFFFFF เป็นค่าเริ่มต้นและจากนั้น ดำเนินการเสริม 1s เพื่อให้ได้ค่าสุดท้าย - นี่คือคำอธิบายวิธีการ 2quot ที่อธิบายไว้ข้างต้นภายใต้ค่าที่คาดหวัง นี่คือสิ่งที่ทำใน CRC Calculator สำหรับ CRC-32s: CRC32: FFFFFFFF เพื่อให้ตรงกับ PKZIP IF LENGTH (s) gt0 หลีกเลี่ยงการเข้าถึงการละเมิดใน D4 THEN CalcCRC32 (Addr (s1), LENGTH (s), CRC32) CRC32: NOT CRC32 เพื่อให้ตรงกับ PKZIP ในการคำนวณ CRC16 ค่าเริ่มต้นคือ FFFF ด้วยวิธีที่ 2 ขอขอบคุณ Rolf Gebhardt และ Glen Harman เพื่อชี้ให้เห็นถึงความไม่สอดคล้องกันในการแก้ไขปัญหาในบทความก่อนหน้านี้ CRC ของไฟล์ ไบต์ทั้งหมดของไฟล์ต้องถูกส่งผ่านไปยังขั้นตอน CalcCRC เช่น CalcCRC16 และ CalcCRC32 เพื่อคำนวณ CRC ของไฟล์ เก่า BlockRead IO ดั้งเดิมจะใช้ในการประจำ CalcFileCRC16 ในหน่วย CRC16 ตั้งแต่ BlockRead ที่จุดหนึ่งคือวิธีเดียวที่จะอ่านกระแสไบนารีของไบต์ CalcFileCRC32 ใช้กระแสหน่วยความจำร่วมสมัยมากขึ้นเพื่ออ่านไบต์ของไฟล์ (เมื่อมีการกำหนดคอมไพล์ตามเงื่อนไข StreamIO) ใช้ MemoryStream เพื่ออ่านไฟล์ในโหมดไบนารี ขั้นตอนวิธี CalcFileCRC32 (FromName: STRING VAR CRCvalue: DWORD VAR TotalBytes: TInteger8 ข้อผิดพลาด VAR: WORD) กระแส VAR: TMemoryStream BEGIN ข้อผิดพลาด: 0 CRCValue: FFFFFFFF สตรีม: TMemoryStream. Create TRY TRY Stream. LoadFromFile (FromName) IF Stream. Size 0 THEN CalcCRC32 (Stream. Memory, Stream. Size, CRCvalue) ยกเว้นกรณี E: EReadError DO ข้อผิดพลาด: 1 END CRCvalue: ไม่ใช่ CRCvalue TotalBytes: Stream. Size FINALLY Stream. Free END END ขั้นตอนข้างต้นถือว่าไฟล์สามารถใส่ลงในหน่วยความจำได้อย่างง่ายดาย TMemoryStream น่าเสียดายที่นี่อาจเป็นสมมติฐานที่ไม่ดีโดยเฉพาะอย่างยิ่งเมื่อไฟล์บางไฟล์มีขนาดใหญ่กว่าหน่วยความจำกายภาพ ตัวอย่างเช่นการประมวลผลไฟล์ขนาด 1 กิกะไบต์ในสตรีมหน่วยความจำที่มีหน่วยความจำกายภาพขนาด 512 เมกะไบต์อาจน้อยกว่าจะประมวลผลหน่วยความจำเสมือนของระบบปฏิบัติการ ตอนนี้นี่ไม่ใช่ปัญหามาก โปรแกรม FileCheck ดูรายงาน Lab FileCheck สำหรับข้อมูลเกี่ยวกับการสร้าง CRC ของไฟล์ไดเรกทอรีหรือแม้แต่ไดรฟ์ข้อมูลทั้งหมด (CRCs ของ CRCs ของรายการที่เรียงลำดับไว้อย่างดีของไฟล์ - ใช้เพื่อตรวจหาการเปลี่ยนแปลงในไดเร็กทอรีหรือไดรฟ์ดิสก์ทั้งหมด) โปรแกรมบรรทัดคำสั่ง คุณสามารถคอมไพล์ตัวอย่างบรรทัดคำสั่ง CRC16Dem และ CRC32Dem จากหน้าต่าง DOS (สมมติว่าพา ธ ของคุณมีไดเร็กทอรี Delphi bin) โดยป้อน: DCC32 CRC16Dem. PAS หรือ DCC32 CRC32Dem. PAS ศึกษา CRC16Dem และ CRC32Dem สำหรับโปรแกรมบรรทัดคำสั่งเพื่อคำนวณ CRC โดยไม่มีส่วนติดต่อกับ Windows CD การติดตั้ง Delphi มีไฟล์ CRC32.C ซึ่งจะแสดงวิธีการคำนวณ CRC-32s รวมทั้งตารางค้นหาใน InfoExtrasZlibSrc หน่วย Peter Haas Delphi สำหรับการคำนวณ CRC โดยอ้างอิงจากเอกสาร: quotA คู่มือเจ็บปวดสำหรับ CRC Error Detection Algorithmsquot ftp: ftp. rocksoftpaperscrcv3.txt หน่วย Peter Haas มีหน้าที่ในการคำนวณ CRC โดยพลการ (ขึ้นอยู่กับ 32 บิต) โดยใช้พารามิเตอร์ ( Polynom, Init, XorOut, ReflectIn, ReflectOut) อีกส่วนหนึ่งคือการสร้างตารางค้นหาและการคำนวณด้วยตารางนี้ หน่วยนี้ยังสามารถใช้หาค่าพารามิเตอร์สำหรับการคำนวณ CRC ที่ไม่รู้จักด้วยการทดลองและข้อผิดพลาด สุดท้าย แต่อย่างน้อยก็มีหน่วยฟังก์ชันที่สร้างแหล่ง Delphi เพื่อคำนวณ CRC ด้วยพารามิเตอร์ที่ระบุในแอ็พพลิเคชันที่แยกต่างหาก delphi. pjh2.deunitsdownloadCRCs. zip quotFor ความรักของ Gamequot โดย Michael Barr, การเขียนโปรแกรมระบบสมองกลฝัง ธ. ค. 1999 หน้า 47-54 embedinternet99129912connect. htm quotSlow และ Steady Never Lost Racequot โดย Michael Barr, การเขียนโปรแกรมระบบฝังตัว มกราคม 2000, หน้า 37-46 แสดงวิธีคำนวณตารางค้นหา CRC embeddedinternet00010001connect. htm CRC Pitstop เป็นพื้นที่เก็บข้อมูลสำหรับข้อมูลเกี่ยวกับ CRC และขั้นตอนวิธีการตรวจสอบอื่น ๆ rosscrc CRC - Der Cyclic Redundancy Code (ภาษาเยอรมัน) informatik. uni-frankfurt. de Robert Lees รหัสที่ดีที่สุดสำหรับการคำนวณ CRC: optimalcodeexcrc. zip Steve Schafers UseNet Post แสดงการคำนวณ CRC-32 Search Table Bjrn Kriedemanns โพสต์ UseNet กับ CRC Unit ตั้งแต่เดือนเมษายนปี 1997 DDJ: CRC16, XYZModemCRC16, CRC32 Lars Truijenss UseNet โพสต์แสดงรหัส Delphi สำหรับ XModem CRC-16 (X 16 X 12 X 5 1) ด้วยตารางค้นหา ชุดเครื่องคิดเลข CRC มีฟังก์ชันที่ปรับความเร็วได้สามแบบเพื่อคำนวณ (หรือคำนวณต่อ) ของการตรวจสอบความซ้ำซ้อน Cyclic Reductionancy (CRC) สามารถใช้งานได้กับโปรโตคอล XModem (16-bit CRC) ยูทิลิตี quotARCquot ของ SEAs, PKZip (32-bit CRC) และซอฟต์แวร์อื่น ๆ ที่สามารถใช้งานได้กับระบบอื่น ๆ เช่น delphi. icm. edu. plftpd10freecrc. zip SWC (Software Archive Group) CRC Snipets: รวมถึงการปฏิบัติต่างๆของ CRC และ Checksum gdsoftswagdownloads. html gdsoftswagcrc. zip (ต้องใช้โปรแกรม quotReader quot; viewCalculating CRC Checksums ใน CQuot โดย Colin Mahoney ในเดือนมิถุนายน 1999) อัลกอริทึม Alfresco: Whirlpool (อัลกอริธึม CRC), Julian Bucknall unravels CRC, Delphi Magazine ปัญหา 48 สิงหาคม 1999 แยกและเข้าร่วม (ใช้ CRCs เพื่อตรวจสอบสำเนาถูกต้องหลังจากที่แฟ้มถูกแยกออกเป็นแฟ้มขนาดฟล็อปปี้ดิสก์แยกต่างหากและภายหลังเข้าร่วม) เครื่องมือ D7 quot เครื่องมือการสื่อสาร (ดิสก์ 1) มีไดเรกทอรี nagsoftwaresolutionscrc32library กับ CRC32.EXE จาก NAG Software Solutions ดู CRC32 Library บน CD 1 ของ Delphi Studio Companion Tools ตรวจสอบตัวเลข (บัตรเครดิตและอัลกอริทึมหลักเช็คดอลคิว 10 หลัก) delphiforfun. orgProgramsCheckdigits. htm วรรณคดีที่เป็นประโยชน์: quotProcedure for Computing CRC-32 Value, จาก Microsoft Systems Journal มีนาคม 1995, หน้า 107-108 การคำนวณโดย CRC ของ Aram Perez ใน IEEE Micro มิถุนายน 1983 หน้า 40-50 แสดงวิธีการสร้างตารางการค้นหาซึ่งเป็นวิธีที่ดีที่สุดในการติดตั้งซอฟต์แวร์ (เทียบกับการเลื่อนที่ทำขึ้นเมื่อใช้งานกับฮาร์ดแวร์) คำแนะนำเกี่ยวกับ CRC Computationsquot โดย Tenkasi V. Ramabadran และ Sunil S. Gaitonde ใน IEEE Micro สิงหาคม 2531, หน้า 62-75 การตรวจสอบความซ้ำซ้อนของ quotCyclic สำหรับ Data Integrity หรือ Identityquot โดย William H. Press และ Saul A. Teukolsky, Computers in Physics JulAug 1989, หน้า 88-91 ชื่อย่อทั่วไปมาตรฐานอื่น ๆ : CRC-16 Reverse: x 16 x 14 x 1 1 SDLC ย้อนกลับ: x 16 x 11 x 4 1 CRC-12: x 12 x 11 x 3 x 2 x 1 1 ข้อสรุปค่า CRC โดยเฉพาะ CRC-32 เป็นวิธีที่ดีมากในการตรวจสอบความสมบูรณ์ของสตริงหรือแม้แต่ไฟล์ คำหลัก cyclic redundancy check, CRC-16, CRC-32, APPTYPE CONSOLE, ตารางค้นหา, XOR, COMP, Int64, IntToHex, Addr, Delphi, Kylix CLX (ไลบรารีคอมโพเนนต์สำหรับแพลตฟอร์มข้ามแพลตฟอร์ม - Windows หรือ Linux) Kylix 3 Source และ CrcCalculator executable: CRCCLX. tar. gz ใน Linux เพื่อแยกไฟล์: gunzip lt ไฟล์ CRCCLX. tar. gz tar xvf - VCL (Visual Component Library - เฉพาะ Windows) Delphi 2 - 6 แหล่งที่มาและ EXE (234 KB): CRCDelphi. ZIP ( รุ่นเก่า) Borland C 5.02 quotCquot CRC-32 แหล่งที่มาและ EXE (45 KB): CRCc. ZIP ใช้ไฟล์คำสั่งเพื่อรวบรวม: make - f crc32.mak แก้ไขไฟล์. mak เพื่อชี้ไปที่ตำแหน่งที่ถูกต้องของ wildargs. obj แฟ้ม. mak จะทดสอบโดยอัตโนมัติว่าผลลัพธ์จะตรงกับ PKZIP) ยูทิลิตีบรรทัดคำสั่งนี้สามารถใช้ได้กับ wildcards เพื่อค้นหา CRC-32 ของไฟล์ในไดเร็กทอรีเช่น crc32

Comments

Popular posts from this blog

สกุลเงิน แลกเปลี่ยน ซื้อขาย