CRC(循环冗余校验)直接计算和查表法
文章目录
- CRC概述
- CRC名词解释
- 宽度 (WIDTH)
- 多项式 (POLY)
- 初始值 (INIT)
- 结果异或值 (XOROUT)
- 输入数据反转(REFIN)
- 输出数据反转(REFOUT)
- CRC手算过程
- 模二加减(异或运算(XOR))
- 运算过程
- 直接计算
- 输入数据不反转
- 输入数据反转
- 方法1
- 方法2
- 查表法
- 原理
- 表的生成
- 查表法代码
- 总结
原文链接: https://blog.csdn.net/stronger2017/article/details/72903415
原文链接:https://blog.csdn.net/fuckthebugs/article/details/132267279
原文链接:https://blog.csdn.net/m0_57585228/article/details/125088520
CRC概述
###校验
校验是什么,个人理解就是经过一个算法,使用大量数据(几MB的数据)生成较小长度的一串信息(如16Bit),并切要做到
原数据不同时,生成的信息大概率不同(不是加密算法不考虑刻意造数据的情况)
原数据中任意一个或几个数据出现错误时,生成的信息不同(所有的原信息都需要被囊括进生成数据中,也就是说每一个数据都必须参与校验的计算过程并且能对其产生影响)
CRC名词解释
宽度 (WIDTH)
即最后生成的数据长度
可以为任意长度
一般使用16bit或32bit
如0xFFFF是16bit的校验和
如0xFFFFFFFF是32bit的校验和
多项式 (POLY)
这个多项式的每项的系数为0或1,最高系数是和宽度相等,因为有0次幂存在,因此总多项式为
宽度+1项
例如,16bit的CRC16-MODBUS的生成多项式为
x^16 + x^15+ x^2 + 1,用HEX表示为0x1 8005
要求最高幂(这里是x的16次方)系数为1,最低次幂(永远是x的0次方)系数为1
因为最高次一定为1,因此可以将其省略,所有生成多项式的值为0x8005
注意:多项式的其他位可以是任意的,但是检验效果并不完全相同,建议使用某些协议规定的多项式
初始值 (INIT)
因为使用程序进行CRC计算时使用一个宽度 (WIDTH)为长度的寄存器进行
我们需要给这个寄存器写入初始值,写入的初始值即为这个值
一般为全是0或者全是1
如16bit为0xFFFF或0x0000
结果异或值 (XOROUT)
计算完成后输出之前需要于此值进行异或操作
一般为全0或全1,长度和宽度 (WIDTH)相等
输入数据反转(REFIN)
CRC计算时是以字节(Byte)为单位输入寄存器中的
这个参数是说明输入是从这个数据的
直接输入寄存器则是高位到低位
经过反转输入则是低位到高位
具体输入到寄存器的哪个位置之后再说
反转的例子
0x80(0b1000 0000)反转之后就是0x01(0b0000 0001)
0x50(0b0101 0000)反转之后就是0x0A (0b0000 1010)
输出数据反转(REFOUT)
输出数据反转和输入反转类似
只不过是以宽度 (WIDTH)为基准反转而已
如0x8000(0b1000 0000 0000 0000)反转是0x0001 (0b0000 0000 0000 0001)
如0xA000(0b1010 0000 0000 0000)反转是0x0005 (0b0000 0000 0000 0101)
使用CRC的协议会将这些都规定好,需要时查询即可
CRC手算过程
这只是帮助理解所使用的过程,应用中一般人不会手算CRC吧,这里先忽略初值,选取简单的数据和多项式
模二加减(异或运算(XOR))
这三个说法是等价的,即运算的两个算子相同为0,不同为1,c语言中为
例子:0b0^0b1=0b1 0b1100^0b1110=0b0010
运算过程
在数据最后补0(位数与宽度相等)
将多项式(完整的)的最高项与数据的第一个1对齐(其他位当作0即可(也就是不改变数据))
整体进行异或操作
重复上述操作,直到所有数据均参与了计算(参与有2种,作为0被掠过也算参与)
所以计算值为0b1110(0xE) 进入在线计算网站验证如下图
直接计算
输入数据不反转
从刚才的手算过程中可以看出,如果每一个数据均需要被遍历,如果为0则掠过,如果为1则进行异或操作
很明显需要使用循环来进行操作
因为是按照字节(Byte)来传输数据
因此需要嵌套循环,外层改变传入的数据,内层遍历8个位(bit)
首先建立寄存器(CRC),这里以16位为例,则需要数据类型为u16
填入初值,这里是0xFFFF
因为要向左移位,因此将数据放到寄存器的高8位(32位就是最高的8位)中(与高8位异或放入)
如果最高位为1,则先左移1位后寄存器与多项式异或,如果为0则仅仅左移1位
重复直到所有数据都参与
寄存器中剩下的便是CRC结果
为什么要放到高8位呢
因为异或具有交换律和结合律,这里不证明,请查百度
因此后8位本质上是将高8位的数据所计算的异或值(本应该与下一个字节进行计算的)先一步进行运算
在往后只需要将下一个字节的数据与移位后的高8位(上一个字节提前计算的)异或即可了
代码例子(C语言写的)
u16 CRC16(u8 * Dat, int Len)
{u16 Poly = 0x8005;u16 CRC = 0xffff;u8 Zj = 0;for (int i = 0; i < Len; i++){
//在这里加输入反转Zj = (Dat[i]);CRC ^= (Zj<< 8);for (int j = 0; j < 8; j++){if (CRC & 0x8000){CRC <<= 1;CRC ^= Poly;}else{CRC <<= 1;}}}
//在这里加输出反转return ((CRC)^0x0000);
}
如果需要反转输出,则在输出异或之前加上反转部分的代码即可
反转 的实现
u16 CRC_Reverse_16(u16 Dat)
{u16 Res = 0;u16 zj = Dat;for (int i = 0; i < 16; i++){if (zj & 0x8000)Res += 1<<i;zj <<= 1;}return Res;
}
u8 CRC_Reverse_8(u8 Dat)
{u8 Res = 0;u8 zj = Dat;for (int i = 0; i < 8; i++){if (zj & 0x80)Res += 1 << i;zj <<= 1;}return Res;
}
输入数据反转
方法1
可以直接在输入之前加上反转的代码即可,即上面加注释的位置
优点:编程简单,无需改架构
缺点:运算量大,会占用更多时间
方法2
将上述代码改为向右移动,这样做之后输出也会自动反转,如需正向则需反转回来(这个运算量小)
注意:需要与寄存器的低8位进行异或(32位就是最低的8位)
例子代码
u16 CRC16_ModBus(u8 * Dat, int Len)
{u16 Poly = CRC_Reverse_16(0x8005);u16 CRC = 0xffff;u8 Zj = 0;for (int i = 0; i < Len; i++){CRC ^= Dat[i];for (int j = 0; j < 8; j++){if (CRC & 0x0001){CRC >>= 1;CRC ^= Poly;}else{CRC >>= 1;}}}return (CRC ^ 0x0000);
}
这个是用来计算MODBUS的CRC校验的
即输入输出均反转
下边是验证
查表法
上述计算过程运算量相等较大,因为每移动一位均需要计算一次异或操作,适合上位机使用
下位机还是建议使用查表法,如果将1Byte的数据做成表,只需要之前的1/8的计算量
原理
异或操作的交换律和结合律
将1Byte数据直接进行消除,直接计算的原理类似,也是将异或值提前计算,只是在程序开跑之前就计算了,这个计算值就是表
表的生成
使用表是以空间换时间的操作方式
为了便于计算出表,我们将初始值设为0(也可以不为全0,只不过需要多一步异或而已,与输入的那Byte数据进行异或的部分必须为0),输入0-0xFF的1Byte数据进行CRC,输出值为表
生成MODBUS的表的例程
u16 CRC16_ModBus1(u8 Dat)
{u16 Poly = CRC_Reverse_16(0x8005);u16 CRC = 0xffff;u8 Zj = 0;for (int i = 0; i < Len; i++){CRC ^= Dat[i];for (int j = 0; j < 8; j++){if (CRC & 0x0001){CRC >>= 1;CRC ^= Poly;}else{CRC >>= 1;}}}return (CRC ^ 0x0000);
}
int main()
{u8 i=0;for(i=0;i<=0xFF;i++){printf("%X",CRC16_ModBus1(i));}
}
查表法代码
这是生成的表
const u16 T[256] =
{0x0000,0xC0C1,0xC181,0x0140,0xC301,0x03C0,0x0280,0xC241,0xC601,0x06C0,0x0780,0xC741,0x0500,0xC5C1,0xC481,0x0440,0xCC01,0x0CC0,0x0D80,0xCD41,0x0F00,0xCFC1,0xCE81,0x0E40,0x0A00,0xCAC1,0xCB81,0x0B40,0xC901,0x09C0,0x0880,0xC841,0xD801,0x18C0,0x1980,0xD941,0x1B00,0xDBC1,0xDA81,0x1A40,0x1E00,0xDEC1,0xDF81,0x1F40,0xDD01,0x1DC0,0x1C80,0xDC41,0x1400,0xD4C1,0xD581,0x1540,0xD701,0x17C0,0x1680,0xD641,0xD201,0x12C0,0x1380,0xD341,0x1100,0xD1C1,0xD081,0x1040,0xF001,0x30C0,0x3180,0xF141,0x3300,0xF3C1,0xF281,0x3240,0x3600,0xF6C1,0xF781,0x3740,0xF501,0x35C0,0x3480,0xF441,0x3C00,0xFCC1,0xFD81,0x3D40,0xFF01,0x3FC0,0x3E80,0xFE41,0xFA01,0x3AC0,0x3B80,0xFB41,0x3900,0xF9C1,0xF881,0x3840,0x2800,0xE8C1,0xE981,0x2940,0xEB01,0x2BC0,0x2A80,0xEA41,0xEE01,0x2EC0,0x2F80,0xEF41,0x2D00,0xEDC1,0xEC81,0x2C40,0xE401,0x24C0,0x2580,0xE541,0x2700,0xE7C1,0xE681,0x2640,0x2200,0xE2C1,0xE381,0x2340,0xE101,0x21C0,0x2080,0xE041,0xA001,0x60C0,0x6180,0xA141,0x6300,0xA3C1,0xA281,0x6240,0x6600,0xA6C1,0xA781,0x6740,0xA501,0x65C0,0x6480,0xA441,0x6C00,0xACC1,0xAD81,0x6D40,0xAF01,0x6FC0,0x6E80,0xAE41,0xAA01,0x6AC0,0x6B80,0xAB41,0x6900,0xA9C1,0xA881,0x6840,0x7800,0xB8C1,0xB981,0x7940,0xBB01,0x7BC0,0x7A80,0xBA41,0xBE01,0x7EC0,0x7F80,0xBF41,0x7D00,0xBDC1,0xBC81,0x7C40,0xB401,0x74C0,0x7580,0xB541,0x7700,0xB7C1,0xB681,0x7640,0x7200,0xB2C1,0xB381,0x7340,0xB101,0x71C0,0x7080,0xB041,0x5000,0x90C1,0x9181,0x5140,0x9301,0x53C0,0x5280,0x9241,0x9601,0x56C0,0x5780,0x9741,0x5500,0x95C1,0x9481,0x5440,0x9C01,0x5CC0,0x5D80,0x9D41,0x5F00,0x9FC1,0x9E81,0x5E40,0x5A00,0x9AC1,0x9B81,0x5B40,0x9901,0x59C0,0x5880,0x9841,0x8801,0x48C0,0x4980,0x8941,0x4B00,0x8BC1,0x8A81,0x4A40,0x4E00,0x8EC1,0x8F81,0x4F40,0x8D01,0x4DC0,0x4C80,0x8C41,0x4400,0x84C1,0x8581,0x4540,0x8701,0x47C0,0x4680,0x8641,0x8201,0x42C0,0x4380,0x8341,0x4100,0x81C1,0x8081,0x4040
};
查表的代码和直接计算类似,只需要注意两点
每次移动8位
移动之前要与数据进行异或操作来生成表的序号(移动异或之后的低位就相当于直接计算的一个循环走完,重新输入数据了,这里是将8位数据直接消除,因此需要生成标号,这个标号仅使用即可,无需放入寄存器中,因为它马上就因为移位丢失了)
MODBUS的查表法代码
u16 CRC16_ModBus2(u8 *Dat, int Len)
{u16 CRC = 0xffff;//初始值u8 Zj;for (int i = 0; i < Len ; i++){Zj = (CRC & 0xFF)^ Dat[i];//生成标号,一次将低8位数据消除CRC >>= 8;CRC ^= T[Zj];}return (CRC);
}
总结
typedef unsigned char u8;
typedef unsigned short int u16;u16 CRC_Reverse_16(u16 Dat)
{u16 Res = 0;u16 zj = Dat;for (int i = 0; i < 16; i++){if (zj & 0x8000)Res += 1<<i;zj <<= 1;}return Res;
}
u8 CRC_Reverse_8(u8 Dat)
{u8 Res = 0;u8 zj = Dat;for (int i = 0; i < 8; i++){if (zj & 0x80)Res += 1 << i;zj <<= 1;}return Res;
}
u16 CRC16_ModBus_Forward(u8 * Dat, int Len)
{u16 Poly = 0x8005;u16 CRC = 0xffff;u8 Zj = 0;for (int i = 0; i < Len; i++){Zj = CRC_Reverse_8(Dat[i]);CRC ^= (Zj<< 8);for (int j = 0; j < 8; j++){if (CRC & 0x8000){CRC <<= 1;CRC ^= Poly;}else{CRC <<= 1;}}}return (CRC_Reverse_16(CRC)^0x0000);
}
u16 CRC16_ModBus_Reverse(u8 * Dat, int Len)
{u16 Poly = CRC_Reverse_16(0x8005);u16 CRC = 0xffff;u8 Zj = 0;for (int i = 0; i < Len; i++){CRC ^= Dat[i];for (int j = 0; j < 8; j++){if (CRC & 0x0001){CRC >>= 1;CRC ^= Poly;}else{CRC >>= 1;}}}return (CRC ^ 0x0000);
}
const u16 T[256] =
{0x0000,0xC0C1,0xC181,0x0140,0xC301,0x03C0,0x0280,0xC241,0xC601,0x06C0,0x0780,0xC741,0x0500,0xC5C1,0xC481,0x0440,0xCC01,0x0CC0,0x0D80,0xCD41,0x0F00,0xCFC1,0xCE81,0x0E40,0x0A00,0xCAC1,0xCB81,0x0B40,0xC901,0x09C0,0x0880,0xC841,0xD801,0x18C0,0x1980,0xD941,0x1B00,0xDBC1,0xDA81,0x1A40,0x1E00,0xDEC1,0xDF81,0x1F40,0xDD01,0x1DC0,0x1C80,0xDC41,0x1400,0xD4C1,0xD581,0x1540,0xD701,0x17C0,0x1680,0xD641,0xD201,0x12C0,0x1380,0xD341,0x1100,0xD1C1,0xD081,0x1040,0xF001,0x30C0,0x3180,0xF141,0x3300,0xF3C1,0xF281,0x3240,0x3600,0xF6C1,0xF781,0x3740,0xF501,0x35C0,0x3480,0xF441,0x3C00,0xFCC1,0xFD81,0x3D40,0xFF01,0x3FC0,0x3E80,0xFE41,0xFA01,0x3AC0,0x3B80,0xFB41,0x3900,0xF9C1,0xF881,0x3840,0x2800,0xE8C1,0xE981,0x2940,0xEB01,0x2BC0,0x2A80,0xEA41,0xEE01,0x2EC0,0x2F80,0xEF41,0x2D00,0xEDC1,0xEC81,0x2C40,0xE401,0x24C0,0x2580,0xE541,0x2700,0xE7C1,0xE681,0x2640,0x2200,0xE2C1,0xE381,0x2340,0xE101,0x21C0,0x2080,0xE041,0xA001,0x60C0,0x6180,0xA141,0x6300,0xA3C1,0xA281,0x6240,0x6600,0xA6C1,0xA781,0x6740,0xA501,0x65C0,0x6480,0xA441,0x6C00,0xACC1,0xAD81,0x6D40,0xAF01,0x6FC0,0x6E80,0xAE41,0xAA01,0x6AC0,0x6B80,0xAB41,0x6900,0xA9C1,0xA881,0x6840,0x7800,0xB8C1,0xB981,0x7940,0xBB01,0x7BC0,0x7A80,0xBA41,0xBE01,0x7EC0,0x7F80,0xBF41,0x7D00,0xBDC1,0xBC81,0x7C40,0xB401,0x74C0,0x7580,0xB541,0x7700,0xB7C1,0xB681,0x7640,0x7200,0xB2C1,0xB381,0x7340,0xB101,0x71C0,0x7080,0xB041,0x5000,0x90C1,0x9181,0x5140,0x9301,0x53C0,0x5280,0x9241,0x9601,0x56C0,0x5780,0x9741,0x5500,0x95C1,0x9481,0x5440,0x9C01,0x5CC0,0x5D80,0x9D41,0x5F00,0x9FC1,0x9E81,0x5E40,0x5A00,0x9AC1,0x9B81,0x5B40,0x9901,0x59C0,0x5880,0x9841,0x8801,0x48C0,0x4980,0x8941,0x4B00,0x8BC1,0x8A81,0x4A40,0x4E00,0x8EC1,0x8F81,0x4F40,0x8D01,0x4DC0,0x4C80,0x8C41,0x4400,0x84C1,0x8581,0x4540,0x8701,0x47C0,0x4680,0x8641,0x8201,0x42C0,0x4380,0x8341,0x4100,0x81C1,0x8081,0x4040
};
u16 CRC16_ModBus_Table(u8 *Dat, int Len)
{u16 CRC = 0xffff;u8 Zj;for (int i = 0; i < Len ; i++){Zj = (CRC & 0xFF)^ Dat[i];CRC >>= 8;CRC ^= T[Zj];}return (CRC);
}
相关文章:
CRC(循环冗余校验)直接计算和查表法
文章目录 CRC概述CRC名词解释宽度 (WIDTH)多项式 (POLY)初始值 (INIT)结果异或值 (XOROUT)输入数据反转(REFIN)输出数据反转(REFOUT) CRC手算过程模二加减&am…...
【算法思考记录】力扣2952. 需要添加的硬币的最小数量【C++,思路挖掘,贪心与证明】
原题链接 文章目录 需要添加的硬币的最小数量:贪心算法实现题目概述示例分析 关键思路分析贪心算法的优化选择证明案例推演与算法实现 C 实现结论 需要添加的硬币的最小数量:贪心算法实现 题目概述 在这个困难难度的算法题中,我们要解决的…...
用友NC JiuQiClientReqDispatch反序列化RCE漏洞复现
0x01 产品简介 用友NC是一款企业级ERP软件。作为一种信息化管理工具,用友NC提供了一系列业务管理模块,包括财务会计、采购管理、销售管理、物料管理、生产计划和人力资源管理等,帮助企业实现数字化转型和高效管理。 0x02 漏洞概述 用友 NC JiuQiClientReqDispatch 接口存在…...
Linux:docker镜像的创建(5)
1.基于已有镜像创建 步骤: 1.将原始镜像加入容器并运行 2.在原始镜像中部署各种服务 3.退出容器 4.使用下面命令将容器生成新的镜像 现在我们在这个容器里做了一些配置,我们要把他做成自己镜像 docker commit -m "centos7_123" -a "tarr…...
数据结构与算法-D2D3线性表之顺序表
线性表:包含若干数据元素的一个线性序列,特征如下: 1)对非空表,a0是表头,无前驱; 2)an-1是表尾,无后继; 3)其他元素仅且仅有一个前驱,…...
01_W5500简介
目录 W5500简介: 芯片特点: 全硬件TCPIP协议栈: 引脚分布: W5500简介: W5500是一款高性价比的以太网芯片,其全球独一无二的全硬件TCPIP协议栈专利技术,解决了嵌入式以太网的接入问题,简单易用ÿ…...
异常 Exception 练习题 (未完成)
异常 Exception 练习题 try-catch异常处理1234 异常1(没有自己写)234 try-catch异常处理 1 class Exception01 {public static int method() {try {String[] names new String[3];//String[]数组if (names[1].equals("tom")) {//NullPointe…...
Linux系统编程:并发与信号总结
并发 并发是指两个或多个同时独立进行的活动。在计算机系统中,并发指的是同一个系统中多个独立活动同时进行,而非依次进行。 并发在计算机系统中的表现: 一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是…...
Jmeter 接口-加密信息发送(一百九十九)
方式1:使用函数助手 比如MD5加密方式: 如图,需要对${user}进行MD5加密 1、打开函数助手,找到MD5,输入需要加密的值 2、将${__MD5(${user},)}放到请求中 3、查看请求,请求成功 方式2:导入jar包…...
微信小程序nodejs+vue+uniapp视力保养眼镜店连锁预约系统
作为一个视力保养连锁预约的网络系统,数据流量是非常大的,所以系统的设计必须满足使用方便,操作灵活的要求。所以在设计视力保养连锁预约系统应达到以下目标: (1)界面要美观友好,检索要快捷简易…...
掌握Vue侦听器(watch)的应用
文章目录 🍁watch 的优缺点🍂Watch 优点🍂Watch 缺点 🍁watch 的用法🍂对象式 watch🍂函数式 watch 🍁代码示例🍂监听基本数据类型🍂监听复杂数据类型(Object…...
SAP-PP:PP顾问管理系统的相关建议
本博客将探讨生产计划领域的控制要点。这将有助于减少仓库库存不准确情况,因为库存不准确会导致实物库存、发货、成本核算和计划方面出现许多效率低下的问题。 在物料主数据关键字段中,必须配置计划交货时间、GR处理时间、内部生产时间、计划交货时间&a…...
Unity资源路径与读取
Unity资源路径有: 1、StreamingAssets:只读,一般用于存放应用程序运行时需要加载的资源文件,可以通过Application.streamingAssetsPath来获取。 2、PersistentDataPath:可读写,一般用于存放应用程序运行时…...
“大+小模型”赋能油气行业高质量发展
近日,中国石油石化科技创新大会暨新技术成果展在北京盛大举行,九章云极DataCanvas公司携油气行业一站式AI综合解决方案重磅亮相,充分展示了公司助推油气行业实现AI规模化应用深厚的AI技术实力和领先的AI应用水准,赢得了行业专家和…...
【win32_004】字符串处理函数
StringCbPrintf 函数 (strsafe.h):格式化字符串 STRSAFEAPI StringCbPrintf([out] STRSAFE_LPSTR pszDest,//目的缓冲区 LPSTR指针或者数组[in] size_t cbDest,//目的缓冲区大小[in] STRSAFE_LPCSTR pszFormat,//格式 例如: TEXT("%d&…...
如果不小心修改了按钮的名字并且忘记了原名字
出现上述情况,可以右边点击转到代码,注释掉问题行,此页的设计界面就恢复了。...
opencv阈值处理
阈值处理 二值化 自适应阈值 OTSU二值化...
html之JS
1、JS的引入 <!-- 内嵌 --><!-- <script>alert(4)</script> --><!-- 外引 --><!-- 内嵌和外引同时有的时候,内嵌被覆盖 --><script src"js/index.js" defer></script>//defer 延迟执行 2、js的变量使用…...
SQL Server的安装和首个库的创建
一、熟悉SQL Server的安装环境; 1.安装Microsoft的数据库管理系统SQL Server 2022 先把SQL Server 2022下载好后进行解压后出现以下界面然后点击基本进行安装 然后会出现以下界面: 一步步按照提示往下走即可,把SQL Server 2022安装完成后再…...
STM32下载程序的五种方法
刚开始学习 STM32 的时候,很多小伙伴满怀热情买好了各种设备,但很快就遇到了第一个拦路虎——如何将写好的代码烧进去这个黑乎乎的芯片~ STM32 的烧录方式多样且灵活,可以根据实际需求选择适合的方式来将程序烧录到芯片中。本文将…...
基于springboot + vue大学生竞赛管理系统
qq(2829419543)获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:springboot 前端:采用vue技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件…...
【详解】Spark数据倾斜问题由基础到深入详解-完美理解-费元星
数据倾斜定义:顾名思义,就是大量相似或相同数据聚集在一个块的节点里,导致计算和资源分配不均导致的计算缓慢(长尾)问题。 数据倾斜原因: count(distinct field) group by NULL 空值 Shuffle (概率最…...
xss漏洞后端进行html消毒
import org.jsoup.Jsoup;public static String sanitizeHtml(String input) {// 使用 Jsoup 消毒 HTMLreturn Jsoup.clean(input, Safelist.relaxed());}public static void main(String[] args) {String userInput "<p><script>alert(1)</script>Safe…...
[论文精读]利用大语言模型对扩散模型进行自我修正
本博客是一篇最新论文的精读,论文为UC伯克利大学相关研究者新近(2023.11.27)在arxiv上上传的《Self-correcting LLM-controlled Diffusion Models》 。 内容提要: 现有的基于扩散的文本到图像生成模型在生成与复杂提示精确对齐的图像时仍然存在困难,尤其是需要数值和…...
CTF特训日记day(4-6)
来复现一下2022QWB决赛的RDP题目 这两天腰疼去了趟医院 题目要求我们攻击XRDP程序,从而达到本地提权的效果。 首先观察XRDP程序的版本信息 rootRDP:/home/rdp/Desktop# xrdp-sesman -version xrdp-sesman 0.9.18The xrdp session managerCopyright (C) 2004-2020…...
【深度学习笔记】09 权重衰减
09 权重衰减 范数和权重衰减利用高维线性回归实现权重衰减初始化模型参数定义 L 2 L_2 L2范数惩罚定义训练代码实现忽略正则化直接训练使用权重衰减 权重衰减的简洁实现 范数和权重衰减 在训练参数化机器学习模型时,权重衰减(decay weight)…...
三大兼容 | 人大金仓兼容+优化MySQL用户变量特性
目前,KingbaseES对MySQL的兼容性,已从功能兼容阶段过渡到强性能兼容、生态全面兼容阶段,针对客户常常遇到的用户变量问题,KingbaseES在兼容MySQL用户变量功能的基础上,优化了MySQL用户变量的一些原生问题,使…...
Git介绍与安装使用
目录 1.Git初识 1.1提出问题 1.2如何解决--版本控制器 1.3注意事项 2.Git安装 2.1Linux-centos安装 2.2Linux-ubuntu安装 2.3Windows安装 3.Git基本操作 3.1创建Git本地仓库 3.2配置Git 4.认识⼯作区、暂存区、版本库 1.Git初识 1.1提出问题 不知道你工作或学习时…...
理解DuLinkList L中的“”引用符号
在C中,DuLinkList &L 这种形式的参数表示 L 是一个 DuLinkList 类型的引用。这里的 & 符号表示引用。 引用是C的一个特性,它提供了一种方式来访问已存在的变量的别名。当你对引用进行操作时,实际上是在操作它所引用的变量。如果你在…...
前端并发多个请求并失败重发
const MAX_RETRIES 3;// 模拟请求 function makeRequest(url) {return new Promise((resolve, reject) > {setTimeout(() > {Math.random() < 0.75 ? resolve(${url} 成功) : reject(${url} 失败); // 随机决定请求是否成功}, Math.random() * 2000); // 随机延时执…...
做网站需要什么执照/百度推广平台
查询mysql数据库时,同样的输入需要不止一次获取值或者一个查询需要做大量运算时,很容易会想到使用redis缓存。但是如果查询并发量特别大的话,请求redis服务也会特别耗时,这种场景下,将redis迁移到本地减少查询耗时是一…...
微信怎样制作网站/网上教育培训机构哪家好
一、主机环境 IP地址 主机名称 部署服务 硬盘(必须是裸设备硬盘,不然无法创建osd) 172.16.5.239 k8s01 ceph-deploy、mon、osd /dev/sdb 172.16.5.240 k8s02 osd /dev/sdb 172.16.5.241 k8s03 osd /dev/sdb 二、环境部署 2.1、配置yum源 cat &g…...
wordpress建企业网站/最好的推广平台是什么软件
转自:http://blog.csdn.net/awj3584/article/details/16963525 Solr调研总结 开发类型 全文检索相关开发 Solr版本 4.2 文件内容 本文介绍solr的功能使用及相关注意事项;主要包括以下内容:环境搭建及调试;两个核心配置文件介绍;维护索引;查询索引,和在查询中可以应用的高亮…...
网页版梦幻西游谛听怎么获得/杭州网络排名优化
使用的环境:Xcode V8.3.3 学习OpenGL的过程中,会使用到gltools,glew,glfw3,glut等库文件,glut包Mac自带,故不需要考虑。主要考虑的是另三个包文件怎样安装,配置。本文主要讲两大部分: 1. glew,…...
阿里巴巴国际网站怎么做/美国今天刚刚发生的新闻
--带参数的游标--DECLAREdept_code emp.deptno%TYPE; --声明列类型变量三个emp_code emp.empno%TYPE;emp_name emp.ename%TYPE;CURSOR emp_cur(deptparam NUMBER) ISSELECT empno, ename FROM EMP WHERE deptno deptparam; --声明显示游标BEGINdept_code : &部门编号; --请…...
怎么用记事本做网站/搜索引擎seo关键词优化效果
尼姆达蠕虫导致网络访问变慢 故障现象Internet访问速度明显变慢,远程无法telnet至路由器。借助Console端口访问路由器,使用show cpu命令查看CPU占用率,高达95%以上,同时,IP Input占用了非常高的CPU占用率。由此&#…...