二维码生成器

#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("最大

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值