#include "stdio.h"
#include "stdlib.h"
//#include "windows.h"//system("mode con:cols=82 lines=43");要用这个加上
//wxp://f2f0yG-RsMvpyie_IO4W 这是我的微信收款码的数据,用这个生成的二维码可以收款,当然你自己的也可以做
typedef unsigned char u8;
//常量
#define Version 6
#define ECLevel 2 //纠错等级为M
#define MaxDataNum 27*4
#define CorCodeNum 16*4
#define ReminderBits 7 //剩余位7位
#define WHITE 32
#define BLACK '$'
char positionDetectionPattern[7][7]={//定位图案
1,1,1,1,1,1,1,
1,0,0,0,0,0,1,
1,0,1,1,1,0,1,
1,0,1,1,1,0,1,
1,0,1,1,1,0,1,
1,0,0,0,0,0,1,
1,1,1,1,1,1,1
};
char alignmentPattern[5][5]={//校准图案 6 34
1,1,1,1,1,
1,0,0,0,1,
1,0,1,0,1,
1,0,0,0,1,
1,1,1,1,1,
};
char timingPattern[25]={1,0,1,0,1,//时序图案
0,1,0,1,0,
1,0,1,0,1,
0,1,0,1,0,
1,0,1,0,1};
char formateInformation[15]={0,0,1,1,1,0,1,1,0,0,1,0,1,0,0}; //格式信息 位反了 01110 01100 00001
char XOR[15]={0,1,0,0,1,0,0,0,0,0,1,0,1,0,1};//与格式信息异或 位反了
//之间有耦合,不好处理
int member_position[256]={0};//值
int member_negation[256]={0};//系数
u8 data[MaxDataNum-2]={0};
u8 siginificantData[MaxDataNum-2]={0};//有效数据
u8 DataCodewords[MaxDataNum];//模式+字节数+有效数据+结束标识符+补充0+补齐字节
u8 ECorCodewords[CorCodeNum];
u8 mode=0x40;//高四位有效
u8 numOfByte;//字节数量
u8 PaddingByte1=236;//11101100 00010001
u8 PaddingByte2=17;
u8 end_indicator=0;//高四位有效
u8 replenishZero=0;//补充零,默认没有
u8 numOfPaddingBytes;//补齐字节数目
char picture[41][41]={0};//二维码图像
char datBits[4*27*8]={0};//数据码二进制
char ecBits[4*16*8]={0};//纠错码二进制
void printfPictureValue();//打印绘制二维码的数据
void member_init();//初始化 member_position member_negation
void insertDat(u8 *data);//得到全部的数据码字
u8 negationToValue(int negation);//系数到值
int* get_generator_polynomial(int length); //得到生成多项式
int* get_ec_polynomial(u8* dat_codewords,int dat_len,int numOfec);//获得纠错码字多项式
void insertEC();//根据数据码字得到纠错码字,放入 ECorCodewords
void datCodeToBits();//将数据码字转化为二进制 ,放入 datBits
void ecCodeToBits();//将纠错码字转化为二进制,放入 ecBits
void insertPicture();//将所有数据放入图像缓存中
void printQR(char p[41][41]);//draw the QR picture
int main(){
//加上这一行后,要让二维码中的黑块(两个#号)区别于周围的颜色,不要白色,因为井号的颜色是白色的,那样不好让手机扫描出二维码
//system("mode con:cols=82 lines=43");//set window size
member_init();
while(1){
printf("最大