首页 > 其他分享 >计算CRC循环校验码的简单C语言实现

计算CRC循环校验码的简单C语言实现

时间:2025-01-12 15:43:45浏览次数:1  
标签:crc int ++ len 校验码 CRC str C语言 data

#include <stdio.h>
#include <string.h>

int data[30]; // 数据
int poly[30]; // 生成式

int main(){
    char str[30];
    // 输入数据
    scanf("%s", str);
    int data_len = strlen(str);
    for (int i = 0; i < data_len; i++){
        data[i] = str[i] - '0';
    }
    // 输入生成式
    scanf("%s", str);
    int crc_len = strlen(str);
    for (int i = 0; i < crc_len; i++){
        poly[i] = str[i] - '0';
    }
    // 补0
    for (int i = 0; i < crc_len-1; i++){
        data[data_len+i] = 0;
    }
    // 模2除法
    for (int i = 0; i < data_len;){
        int start = i;
        for (int j = 0; j < crc_len; j++){
            data[start+j]^=poly[j];
        }
        // 去中间结果的头部0,对齐除数
        while (data[start] == 0)
            start++;
        i = start;
    }

    // 输出余数
    for (int i = data_len; i < data_len+crc_len-1; i++){
        printf("%d", data[i]);
    }

}

标签:crc,int,++,len,校验码,CRC,str,C语言,data
From: https://www.cnblogs.com/qiuliw/p/18666998

相关文章

  • 在keil中ARMCC v6 编译器中用C语言实现ARM cortex-M4 实现startup代码
    #include"stdint.h"#defineStack_Size0x00000800U#defineHeap_Size0x00000400Uuint8_tStack_Mem[Stack_Size]__attribute__((section("STACK")));uint32_t*const__initial_sp=(uint32_t*)&Stack_Mem[Stack_Size];uint8_tHeap_......
  • C语言文件操作
    本文重点:什么是文件文件名文件类型文件缓冲区文件指针文件的打开和关闭文件的顺序读写文件的随机读写文件结束的判定什么是文件磁盘上的文件是文件。但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件程序文件包括源程序文件(后缀为.c),目标文件(w......
  • C语言程序环境和预处理详解
    本章重点:程序的翻译环境程序的执行环境详解:C语言程序的编译+链接预定义符号介绍预处理指令#define宏和函数的对比预处理操作符#和##的介绍命令定义预处理指令#include预处理指令#undef条件编译 程序的翻译环境和执行环境在ANSIC的任何一种实现中,存在......
  • 使用C语言构建简易视频聊天软件框架,一个基础指南
    在探索现代通信技术的过程中,视频聊天软件已成为人们日常沟通不可或缺的一部分。尽管C语言并非构建此类复杂应用的首选(通常选择更高层次的编程语言如C++、Java或利用特定的SDK),但了解其底层原理对于深入理解网络通信至关重要。本文将通过一个简化的例子,展示如何使用C语言构建一个基......
  • C语言常见概念
    文章目录一.计算机语言1.计算机语言经历的阶段2.高级语言经历的发展阶段3.C语言程序结构二.算法1.程序=算法+数据结构2.算法特性3.算法三种基本结构三.常量1.整型常量2.实型常量3.字符常量四.关键字五.ASCII表六.标识符七.数据类型1.基本类型2.枚举类型(enum......
  • 数据结构C语言描述11(图文结合)--二叉搜索树(BST树)的实现(数据采用KV存储形式进行封
    前言这个专栏将会用纯C实现常用的数据结构和简单的算法;有C基础即可跟着学习,代码均可运行;准备考研的也可跟着写,个人感觉,如果时间充裕,手写一遍比看书、刷题管用很多,这也是本人采用纯C语言实现的原因之一;欢迎收藏+关注,本人将会持续更新。文章目录什么是二叉搜索树代码实......
  • c语言 getopt的概念和使用方法
    在C语言中,getopt函数是一个用于解析命令行参数的库函数,它定义在<unistd.h>头文件中。getopt函数允许程序处理短格式的命令行选项(例如-a),并且可以处理选项参数。概念getopt函数的主要目的是解析命令行参数中的选项,它按照以下规则工作:选项必须以短横线-开头。选项......
  • C语言实践:基础通讯录实现
    一、通讯录基本功能1.增加联系人  2.删除联系人  3.查找联系人  4.修改联系人信息5.显示通讯录  6.排序二、联系人信息格式姓名+性别+年龄+地址+电话三、实现思路 1.第一步,我们为了让使用者可以知道我们通讯录的功能一个显示面板是必不可少的。直接prin......
  • C语言基础(一)
    常量与变量常量:在程序运行过程中不能被改变的量变量:在程序运行过程中能被改变的量例如:inti;i=123456;i为变量,在程序运行过程中,其值被改变为123456;而123456为常量,在程序运行过程中不能被改变。使用常量给变量赋值时,在计算机RAM中使用小端字节序,即高地址放高位,低地址放......
  • C语言基础(三)
    C程序的组成包括以下部分(main.c文件只能有一个)c语句分为五类:赋值语句赋值语句就是赋值表达式加上一个分号构成而“=”的左右即分为左值和右值,以下是左值和右值的两个解释locatable  可定位,左值(变量),在RAM中可以通过其地址定位到;readable  可读,右值(常量),只能读取,在......