亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? qrcodedatablockreader.java

?? 手機二維碼的解碼程序QRcodedecoded,經過測試成功。這是java版本。
?? JAVA
字號:
/* * created: 2004/10/04 */package jp.sourceforge.qrcode.reader;import jp.sourceforge.qrcode.QRCodeDecoder;import jp.sourceforge.qrcode.exception.InvalidDataBlockException;import jp.sourceforge.qrcode.util.DebugCanvas;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.UnsupportedEncodingException;public class QRCodeDataBlockReader {	int[] blocks;	int dataLengthMode;	int blockPointer;	int bitPointer;	int dataLength;	int numErrorCorrectionCode;	DebugCanvas canvas;	static final int MODE_NUMBER = 1;	static final int MODE_ROMAN_AND_NUMBER = 2;	static final int MODE_8BIT_BYTE = 4;	static final int MODE_KANJI = 8;	// this constant come from p16, JIS-X-0510(2004) 	final int[][] sizeOfDataLengthInfo = {		{10, 9, 8, 8}, {12, 11, 16, 10}, {14, 13, 16, 12}	};	public QRCodeDataBlockReader(int[] blocks, int version, int numErrorCorrectionCode) {		blockPointer = 0;		bitPointer = 7;		dataLength = 0;		this.blocks = blocks;		this.numErrorCorrectionCode = numErrorCorrectionCode;		if (version <= 9) dataLengthMode = 0;		else if (version >= 10 && version <= 26) dataLengthMode = 1;		else if (version >= 27 && version <= 40) dataLengthMode = 2;		canvas = QRCodeDecoder.getCanvas();	}		int getNextBits(int numBits) throws ArrayIndexOutOfBoundsException {//		System.out.println("numBits:" + String.valueOf(numBits));//		System.out.println("blockPointer:" + String.valueOf(blockPointer));//		System.out.println("bitPointer:" + String.valueOf(bitPointer));		int bits = 0;		if (numBits < bitPointer + 1) { // next word fits into current data block			int mask = 0;			for (int i = 0; i < numBits; i++) {				mask += 1 << i;			}			mask <<= (bitPointer - numBits + 1);						bits = (blocks[blockPointer] & mask) >> (bitPointer - numBits + 1);			bitPointer -= numBits;			return bits;		}		else if (numBits < bitPointer + 1 + 8) { // next word crosses 2 data blocks			int mask1 = 0;			for (int i = 0; i < bitPointer + 1; i++) {				mask1 += 1 << i;			}			bits = (blocks[blockPointer] & mask1) << (numBits - (bitPointer + 1));			blockPointer++;			bits += (blocks[blockPointer]) >> (8 - (numBits - (bitPointer + 1)));			bitPointer = bitPointer - numBits % 8;			if (bitPointer < 0) {				bitPointer = 8 + bitPointer;			}			return bits;			}		else if (numBits < bitPointer + 1 + 16) { // next word crosses 3 data blocks			int mask1 = 0; // mask of first block			int mask3 = 0; // mask of 3rd block			//bitPointer + 1 : number of bits of the 1st block			//8 : number of the 2nd block (note that use already 8bits because next word uses 3 data blocks)			//numBits - (bitPointer + 1 + 8) : number of bits of the 3rd block 			for (int i = 0; i < bitPointer + 1; i++) {				mask1 += 1 << i;			}			int bitsFirstBlock = (blocks[blockPointer] & mask1) << (numBits - (bitPointer + 1));			blockPointer++;			int bitsSecondBlock = blocks[blockPointer] << (numBits - (bitPointer + 1 + 8));			blockPointer++;						for (int i = 0; i < numBits - (bitPointer + 1 + 8); i++) {				mask3 += 1 << i;			}			mask3 <<= 8 - (numBits - (bitPointer + 1 + 8));			int bitsThirdBlock = (blocks[blockPointer] & mask3) >> (8 - (numBits - (bitPointer + 1 + 8)));						bits = bitsFirstBlock + bitsSecondBlock + bitsThirdBlock;			bitPointer = bitPointer - (numBits - 8) % 8;			if (bitPointer < 0) {				bitPointer = 8 + bitPointer;			}			return bits;		}		else {			System.out.println("ERROR!");			return 0;		}	}			int getNextMode() throws ArrayIndexOutOfBoundsException {		//canvas.println("data blocks:"+ (blocks.length - numErrorCorrectionCode));		if ((blockPointer > blocks.length - numErrorCorrectionCode -2))			return 0;		else			return getNextBits(4);	}		int guessMode(int mode) {		//correct modes: 0001 0010 0100 1000		//possible data: 0000 0011 0101 1001 0110 1010 1100		//               0111 1101 1011 1110 1111//		MODE_NUMBER = 1;//		MODE_ROMAN_AND_NUMBER = 2;//		MODE_8BIT_BYTE = 4;//		MODE_KANJI = 8;		switch (mode) {		case 3:			return MODE_NUMBER;		case 5:			return MODE_8BIT_BYTE;		case 6:			return MODE_8BIT_BYTE;		case 7:			return MODE_8BIT_BYTE;		case 9:			return MODE_KANJI;		case 10:			return MODE_KANJI;		case 11:			return MODE_KANJI;		case 12:			return MODE_8BIT_BYTE;		case 13:			return MODE_8BIT_BYTE;		case 14:			return MODE_8BIT_BYTE;		case 15:			return MODE_8BIT_BYTE;		default:			return MODE_KANJI;		}	}	int getDataLength(int modeIndicator) throws ArrayIndexOutOfBoundsException {		int index = 0;		while(true) {			if ((modeIndicator >> index) == 1)				break;			index++;		}				return getNextBits(sizeOfDataLengthInfo[dataLengthMode][index]);	}	public byte[] getDataByte() throws InvalidDataBlockException {		canvas.println("Reading data blocks.");		ByteArrayOutputStream output = new ByteArrayOutputStream();				try {			do {				int mode = getNextMode();				//canvas.println("mode: " + mode);				if (mode == 0) {					if (output.size() > 0)						break;					else						throw new InvalidDataBlockException("Empty data block");				}				//if (mode != 1 && mode != 2 && mode != 4 && mode != 8)				//	break;				//}				if (mode != MODE_NUMBER && mode != MODE_ROMAN_AND_NUMBER &&						mode != MODE_8BIT_BYTE && mode != MODE_KANJI) {/*					canvas.println("Invalid mode: " + mode);					mode = guessMode(mode);					canvas.println("Guessed mode: " + mode); */					throw new InvalidDataBlockException("Invalid mode: " + mode + " in (block:"+blockPointer+" bit:"+bitPointer+")");				}				dataLength = getDataLength(mode);				if (dataLength < 1)					throw new InvalidDataBlockException("Invalid data length: " + dataLength);				//canvas.println("length: " + dataLength);				switch (mode) {				case MODE_NUMBER:					//canvas.println("Mode: Figure");					output.write(getFigureString(dataLength).getBytes());					break;				case MODE_ROMAN_AND_NUMBER:					//canvas.println("Mode: Roman&Figure");					output.write(getRomanAndFigureString(dataLength).getBytes());					break;				case MODE_8BIT_BYTE:					//canvas.println("Mode: 8bit Byte");					output.write(get8bitByteArray(dataLength));					break;				case MODE_KANJI:					//canvas.println("Mode: Kanji");					output.write(getKanjiString(dataLength).getBytes());					break;				}	//							//canvas.println("DataLength: " + dataLength);				//System.out.println(dataString);			} while (true);		} catch (ArrayIndexOutOfBoundsException e) {			//e.printStackTrace();			throw new InvalidDataBlockException("Data Block Error in (block:"+blockPointer+" bit:"+bitPointer+")");		} catch (IOException e) {			throw new InvalidDataBlockException(e.getMessage());		}		return output.toByteArray();	}		public String getDataString() throws ArrayIndexOutOfBoundsException {		canvas.println("Reading data blocks...");		String dataString = "";		do {			int mode = getNextMode();			canvas.println("mode: " + mode);			if (mode == 0)				break;			//if (mode != 1 && mode != 2 && mode != 4 && mode != 8)			//	break;			//}			if (mode != MODE_NUMBER && mode != MODE_ROMAN_AND_NUMBER &&					mode != MODE_8BIT_BYTE && mode != MODE_KANJI) {				// mode = guessMode(mode);				//System.out.println("guessed mode: " + mode);			}							dataLength = getDataLength(mode);			canvas.println(Integer.toString(blocks[blockPointer]));			System.out.println("length: " + dataLength);			switch (mode) {			case MODE_NUMBER: 				//canvas.println("Mode: Figure");				dataString += getFigureString(dataLength);				break;			case MODE_ROMAN_AND_NUMBER:				//canvas.println("Mode: Roman&Figure");				dataString += getRomanAndFigureString(dataLength);				break;			case MODE_8BIT_BYTE:				//canvas.println("Mode: 8bit Byte");				dataString += get8bitByteString(dataLength);				break;			case MODE_KANJI:				//canvas.println("Mode: Kanji");				dataString += getKanjiString(dataLength);				break;			}			//canvas.println("DataLength: " + dataLength);			//System.out.println(dataString);		} while (true);		System.out.println("");		return dataString;	}			String getFigureString(int dataLength) throws ArrayIndexOutOfBoundsException {		int length = dataLength;		int intData = 0;		String strData = "";		do {			if (length >= 3) {				intData = getNextBits(10);				if (intData < 100) strData += "0";				if (intData < 10) strData += "0";				length -= 3;			}			else if (length == 2) {				intData = getNextBits(7);				if (intData < 10) strData += "0";				length -= 2;			}			else if (length == 1) {				intData = getNextBits(4);				length -= 1;			}							strData += Integer.toString(intData);		} while (length > 0);				return strData;	}		String getRomanAndFigureString(int dataLength) throws ArrayIndexOutOfBoundsException  {		int length = dataLength;		int intData = 0;		String strData = "";		final char[] tableRomanAndFigure = {			 '0', '1', '2', '3', '4', '5',	 		 '6', '7', '8', '9', 'A', 'B',			 'C', 'D', 'E', 'F', 'G', 'H',			 'I', 'J', 'K', 'L', 'M', 'N',			 'O', 'P', 'Q', 'R', 'S', 'T',			 'U', 'V', 'W', 'X', 'Y', 'Z',			 ' ', '$', '%', '*', '+', '-',			 '.', '/', ':'			 };		do {			if (length > 1) {				intData = getNextBits(11);				int firstLetter = intData / 45;				int secondLetter = intData % 45;				strData += String.valueOf(tableRomanAndFigure[firstLetter]);				strData += String.valueOf(tableRomanAndFigure[secondLetter]);				length -= 2;			}			else if (length == 1) {				intData = getNextBits(6);				strData += String.valueOf(tableRomanAndFigure[intData]);				length -= 1;			}		} while (length > 0);				return strData;	}		public byte[] get8bitByteArray(int dataLength) throws ArrayIndexOutOfBoundsException  {		int length = dataLength;		int intData = 0;		ByteArrayOutputStream output=new ByteArrayOutputStream();		do {			intData = getNextBits(8);			output.write((byte)intData);			length--;		} while (length > 0);		return output.toByteArray();	}	String get8bitByteString(int dataLength) throws ArrayIndexOutOfBoundsException  {		int length = dataLength;		int intData = 0;		String strData = "";		do {			intData = getNextBits(8);			strData+=(char)intData;			length--;		} while (length > 0);		return strData;	}	String getKanjiString(int dataLength) throws ArrayIndexOutOfBoundsException {		int length = dataLength;		int intData = 0;		String unicodeString = "";		do {			intData = getNextBits(13);			int lowerByte = intData % 0xC0;			int higherByte = intData / 0xC0;			int tempWord = (higherByte << 8) + lowerByte;			int shiftjisWord = 0;			if (tempWord + 0x8140 <= 0x9FFC) { // between 8140 - 9FFC on Shift_JIS character set				shiftjisWord = tempWord + 0x8140;			}			else { // between E040 - EBBF on Shift_JIS character set				shiftjisWord = tempWord + 0xC140;			}			byte[] tempByte = new byte[2];			tempByte[0] = (byte)(shiftjisWord >> 8);			tempByte[1] = (byte)(shiftjisWord & 0xFF);      try{ 			  unicodeString += new String(tempByte, "Shift_JIS");      } catch (UnsupportedEncodingException e) {        e.printStackTrace();      }			length--;		} while (length > 0);					return unicodeString;	}	}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人性色生活片免费看爆迷你毛片| 国产精品色噜噜| 不卡一区二区在线| 丁香婷婷综合网| 国产精品99久久久久久有的能看| 美女任你摸久久 | 喷水一区二区三区| 日日夜夜免费精品| 婷婷六月综合亚洲| 日本系列欧美系列| 久久99国产精品尤物| 精品制服美女久久| 激情综合五月天| 国产91精品精华液一区二区三区| 粉嫩av亚洲一区二区图片| 国产成人免费网站| 99久久99久久精品国产片果冻| a级高清视频欧美日韩| 成人成人成人在线视频| 91同城在线观看| 欧美在线观看视频在线| 欧美卡1卡2卡| 久久久www成人免费毛片麻豆| 欧美韩国日本综合| 亚洲一二三四久久| 精品一区二区三区在线观看| 国产a精品视频| 99久久综合精品| 欧美日韩在线免费视频| 日韩免费视频线观看| 国产夜色精品一区二区av| 亚洲视频一区二区在线| 日日欢夜夜爽一区| 国产99久久久精品| 欧美日韩在线三级| 欧美激情一区二区三区全黄| 香蕉久久夜色精品国产使用方法| 轻轻草成人在线| 成人精品国产一区二区4080| 欧美私模裸体表演在线观看| 欧美电影精品一区二区| 亚洲视频在线观看三级| 国产在线麻豆精品观看| 欧美视频一区在线| 久久免费视频色| 亚洲精品自拍动漫在线| 国产一区不卡在线| 欧美日本在线播放| 中文字幕日韩一区| 国产乱一区二区| 91精品国产91热久久久做人人| 国产精品传媒入口麻豆| 美女网站一区二区| 欧美日韩你懂得| 亚洲精品国产视频| 成人app网站| 国产日本一区二区| 美女高潮久久久| 国产精品一卡二卡| 欧美日韩国产首页| 国产精品短视频| 久久成人综合网| 欧美在线色视频| 久久久久久久综合色一本| 亚洲男女毛片无遮挡| 韩国v欧美v亚洲v日本v| 色综合久久66| 日本一区二区三级电影在线观看| 亚洲精品一二三四区| 狠狠色综合播放一区二区| 在线亚洲欧美专区二区| 久久久久国产精品麻豆ai换脸| 亚洲在线中文字幕| 99久久综合狠狠综合久久| 国产色婷婷亚洲99精品小说| 爽爽淫人综合网网站| 色哦色哦哦色天天综合| 国产视频一区在线播放| 久久国产精品色| 欧美丰满少妇xxxxx高潮对白| 国产精品麻豆网站| 国产又黄又大久久| 欧美不卡一区二区三区四区| 自拍偷拍国产亚洲| 国产成人av一区二区| 精品国产一区a| 免费欧美高清视频| 91精品国产综合久久久蜜臀图片| 亚洲黄色免费网站| 91免费精品国自产拍在线不卡| 337p粉嫩大胆噜噜噜噜噜91av| 秋霞午夜鲁丝一区二区老狼| 欧美日韩激情在线| 亚洲一二三区在线观看| 国产成a人无v码亚洲福利| 精品国产一区二区三区久久久蜜月 | 国产乱淫av一区二区三区| 5566中文字幕一区二区电影| 亚洲成人在线观看视频| 欧美羞羞免费网站| 亚洲成人免费av| 在线亚洲人成电影网站色www| 国产精品免费网站在线观看| 色婷婷精品久久二区二区蜜臀av| 亚洲欧洲日韩av| 色综合久久综合中文综合网| 一卡二卡欧美日韩| 欧美精品在线一区二区三区| 丝袜国产日韩另类美女| 欧美xxxx老人做受| 国产成人免费视频一区| 成人免费在线视频观看| 99热国产精品| 亚洲图片欧美色图| 91精品国产综合久久国产大片| 免费不卡在线视频| 国产亚洲一二三区| 成人av一区二区三区| 夜色激情一区二区| 制服丝袜亚洲播放| 高清国产一区二区| 一区二区三区在线观看视频 | 欧美性生活久久| 麻豆精品一区二区综合av| 精品国产一区二区精华| 99久久er热在这里只有精品66| 国产精品国产三级国产aⅴ入口 | 欧美激情一区二区三区四区| 久久精品国产99久久6| 亚洲女同一区二区| 欧美一级黄色片| 成人91在线观看| 日韩av一区二| 国产精品国产三级国产aⅴ入口| 欧美日韩专区在线| 国产成人精品亚洲777人妖| 亚洲一级不卡视频| 久久综合色天天久久综合图片| 欧美日韩情趣电影| 国产精品一区二区三区四区| 亚洲香肠在线观看| 中文字幕av一区二区三区| 欧美三级午夜理伦三级中视频| 国产麻豆精品在线| 亚洲电影在线免费观看| 国产日韩欧美一区二区三区乱码 | 精品视频在线看| 国产91精品露脸国语对白| 婷婷中文字幕综合| 国产精品久久久久一区二区三区| 色综合中文字幕国产 | 亚洲精品一区二区精华| 色婷婷久久久综合中文字幕| 激情综合亚洲精品| 亚洲一卡二卡三卡四卡| 中文字幕在线一区二区三区| 欧美刺激脚交jootjob| 欧美亚洲日本一区| 91在线播放网址| 国产1区2区3区精品美女| 久久aⅴ国产欧美74aaa| 亚洲mv大片欧洲mv大片精品| 亚洲丝袜精品丝袜在线| 国产亚洲综合av| 国产午夜精品一区二区| 精品黑人一区二区三区久久| 日韩欧美综合在线| 日韩欧美国产不卡| 欧美美女bb生活片| 欧美日韩国产三级| 欧美精品久久一区二区三区| 欧美亚洲国产一卡| 欧美性感一类影片在线播放| 91精品国产综合久久久久| 欧美日韩免费视频| 欧美日韩国产天堂| 欧美老女人在线| 精品理论电影在线| 久久精品欧美一区二区三区不卡| 久久久久久久久久久99999| 欧美精品乱码久久久久久| 欧美精品自拍偷拍| 欧美大片拔萝卜| 久久久久久亚洲综合| 久久久久久久久97黄色工厂| 国产精品福利一区| 亚洲第一激情av| 午夜精品久久久久久久99樱桃| 悠悠色在线精品| 久久精品久久综合| 国产风韵犹存在线视精品| 国产成人免费av在线| 99久久久久久| 欧美色综合久久| 日韩你懂的电影在线观看| 久久免费偷拍视频| 天堂精品中文字幕在线| 国产又粗又猛又爽又黄91精品| 成人午夜免费av| 欧美图区在线视频|