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

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

?? qrcodedatablockreader.java

?? QRcode二維碼生成源代碼,一個做條形碼的代碼
?? JAVA
字號:
/*
 * 嶌惉擔丗 2004/10/04
 *
 * TODO 偙偺惗惉偝傟偨僼傽僀儖偺僥儞僾儗乕僩傪曄峏偡傞偵偼師傪嶲徠丅
 * 僂傿儞僪僂 亜 愝掕 亜 Java 亜 僐乕僪丒僗僞僀儖 亜 僐乕僪丒僥儞僾儗乕僩
 */
package jp.sourceforge.qrcode.codec.reader;

import jp.sourceforge.qrcode.codec.util.DebugCanvas;
/**
 * @author Owner
 *
 * TODO 偙偺惗惉偝傟偨宆僐儊儞僩偺僥儞僾儗乕僩傪曄峏偡傞偵偼師傪嶲徠丅
 * 僂傿儞僪僂 亜 愝掕 亜 Java 亜 僐乕僪丒僗僞僀儖 亜 僐乕僪丒僥儞僾儗乕僩
 */
public class QRCodeDataBlockReader {
	int[] blocks;
	int version;
	int mode = -1;
	int blockPointer;
	int bitPointer;
	int dataLength;
	DebugCanvas canvas;
	final int MODE_NUMBER = 1;
	final int MODE_ROMAN_AND_NUMBER = 2;
	final int MODE_8BIT_BYTE = 4;
	final int MODE_KANJI = 8;

	public QRCodeDataBlockReader(int[] blocks, int version) {
		blockPointer = 0;
		bitPointer = 7;
		dataLength = 0;
		this.blocks = blocks;
		this.version = version;
		canvas = DebugCanvas.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));
		if (numBits < bitPointer + 1) { // 1偮偺僽儘僢僋偱廂傑傞
			int mask = 0;
			for (int i = 0; i < numBits; i++) {
				mask += 1 << i;
			}
			mask <<= (bitPointer - numBits + 1);
			
			int bits = (blocks[blockPointer] & mask) >> (bitPointer - numBits + 1);
			bitPointer -= numBits;
			return bits;
		}
		else if (numBits < bitPointer + 1 + 8) { //2偮偺僽儘僢僋偵傑偨偑傞
			int mask1 = 0;
			for (int i = 0; i < bitPointer + 1; i++) {
				mask1 += 1 << i;
			}
			int 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) { //3偮偺僽儘僢僋偵傑偨偑傞
			int mask1 = 0; //戞1僽儘僢僋偺儅僗僋
			int mask3 = 0; //戞3僽儘僢僋偺儅僗僋
			//bitPointer + 1 : 戞1僽儘僢僋偺價僢僩悢
			//8 : 戞2僽儘僢僋偺價僢僩悢(忢偵8)
			//numBits - (bitPointer + 1 + 8) : 戞3僽儘僢僋偺價僢僩悢
			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)));
			
			int 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 {
		return getNextBits(4);
	}
	
	int guessMode(int mode) {
		//0001 0010 0011 0100
		//0101 0110 0111 1000
		
		if (mode == 3)
			return MODE_ROMAN_AND_NUMBER;
//		else if (mode == 5 || mode == 6)  
//			return MODE_8BIT_BYTE;
		else // mode > 8
			return MODE_KANJI;
	}

	int getDataLength(int mode) throws ArrayIndexOutOfBoundsException {
		switch (mode) {
		case MODE_NUMBER:
			if (version <= 9)
				return getNextBits(10);
			else if (version >= 10 && version <= 26)
				return getNextBits(12);
		case MODE_ROMAN_AND_NUMBER:
			if (version <= 9)
				return getNextBits(9);
			else if (version >= 10 && version <= 26)
				return getNextBits(11);
		case MODE_8BIT_BYTE:
			if (version <= 9)
				return getNextBits(8);
			else if (version >= 10 && version <= 26)
				return getNextBits(16);
		case MODE_KANJI:
			if (version <= 9)
				return getNextBits(8);
			else if (version >= 10 && version <= 26)
				return getNextBits(10);
		default:
				return 0;
		}
	}	
	
	public String getDataString() throws ArrayIndexOutOfBoundsException {
		canvas.println("Reading data blocks.");
		String dataString = "";
		do {
			mode = getNextMode();
			//System.out.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);
			//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: //8價僢僩僶僀僩儌乕僪
				//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;
	}
	
	String get8bitByteString(int dataLength) throws ArrayIndexOutOfBoundsException  {
		int length = dataLength;
		int intData = 0;
		String strData = "";
		final char[] table8bitByte = {
			' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '\n', ' ', ' ', ' ', ' ', ' ', 
			' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
			' ', '!', '"', '#', '$', '%', '&', '\'', '(', ')', '*', '+', ',', '-', '.', '/',  
			'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', '[', '\\', ']', '^', '_', 
			'`', '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', '{', '|', '}', '~', ' ', 
			' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
			' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 
			' ', '

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
丰满亚洲少妇av| 欧美大片在线观看| 91精品国产福利| 亚洲色欲色欲www| 国产精品一区二区在线观看不卡 | 精品伊人久久久久7777人| 91在线视频观看| 久久久精品国产免大香伊| 免费久久精品视频| 欧美久久久久久久久久| 亚洲欧美日本韩国| 成人免费高清视频| 亚洲精品在线电影| 毛片av中文字幕一区二区| 欧美美女bb生活片| 亚洲综合小说图片| 色婷婷综合久久久中文字幕| 国产精品久久久久久久久免费樱桃 | 91丨porny丨国产入口| 久久丁香综合五月国产三级网站| 国产综合成人久久大片91| 9191久久久久久久久久久| 亚洲精品国久久99热| 成人福利在线看| 国产亚洲精品福利| 国产福利一区二区三区视频| 精品日韩欧美一区二区| 秋霞电影网一区二区| 欧美精品一二三四| 爽好多水快深点欧美视频| 在线亚洲+欧美+日本专区| 亚洲女同一区二区| 色狠狠av一区二区三区| 一区二区三区中文在线观看| 色综合色狠狠综合色| 一区二区三区日韩欧美精品| 日本高清视频一区二区| 亚洲一线二线三线久久久| 欧美性色欧美a在线播放| 亚洲一区二区不卡免费| 欧美日韩国产美| 蜜臀va亚洲va欧美va天堂| 日韩女优av电影在线观看| 蜜臀久久99精品久久久画质超高清 | 日韩视频免费观看高清完整版| 五月婷婷激情综合| 精品嫩草影院久久| 国产精品456露脸| 国产精品毛片a∨一区二区三区| 成人激情小说乱人伦| 亚洲日本青草视频在线怡红院| 欧美亚洲国产一区在线观看网站 | 91麻豆精品国产综合久久久久久| 三级在线观看一区二区| 久久久久久久免费视频了| 99在线精品一区二区三区| 亚洲精品美国一| 日韩精品一区二区三区swag| 国产九色精品成人porny| 亚洲婷婷在线视频| 欧美一区二区福利视频| 成人性生交大片| 亚洲香肠在线观看| 久久精品亚洲一区二区三区浴池| 91在线精品一区二区三区| 免费看日韩精品| 最新国产の精品合集bt伙计| 7777女厕盗摄久久久| www.爱久久.com| 久久国产精品色婷婷| 亚洲柠檬福利资源导航| 亚洲精品在线观看网站| 欧美图区在线视频| 成人激情黄色小说| 久久精品av麻豆的观看方式| √…a在线天堂一区| 欧美成人激情免费网| 日本韩国欧美一区二区三区| 精品一区二区三区的国产在线播放 | 美女国产一区二区| 亚洲影院理伦片| 国产日韩欧美亚洲| 欧美成人三级电影在线| 在线观看日韩精品| 成人av影院在线| 国产伦精品一区二区三区免费迷 | 不卡视频一二三| 精品一区在线看| 日本美女一区二区三区视频| 成人免费一区二区三区视频| 欧美videos中文字幕| 日韩免费电影网站| 国产成人免费视频网站| 另类综合日韩欧美亚洲| 一区二区国产盗摄色噜噜| 国产欧美一区二区精品仙草咪| 欧美日韩国产一区二区三区地区| 97精品国产露脸对白| 国产精品白丝av| 国产一区二区在线影院| 看片的网站亚洲| 蜜臀av性久久久久蜜臀av麻豆| 亚洲成人先锋电影| 性感美女极品91精品| 有码一区二区三区| 亚洲激情综合网| 亚洲精选免费视频| 亚洲精品五月天| 一区二区三区在线视频播放| 中文字幕一区二区三区四区| 国产精品传媒视频| 亚洲视频在线一区二区| 亚洲天堂免费看| 亚洲色图制服丝袜| 亚洲一区二区三区四区五区黄| 一区二区在线观看免费| 亚洲一本大道在线| 日韩一区欧美二区| 久久国产精品72免费观看| 久久国产精品无码网站| 国产一区二区三区免费看| 国产成人亚洲精品青草天美| 成人午夜激情影院| 91福利在线免费观看| 欧美精品成人一区二区三区四区| 欧美日韩电影在线| 欧美精品一区二| 国产精品欧美一区喷水| 亚洲精品福利视频网站| 日韩精品一二三四| 精品一二三四区| eeuss鲁片一区二区三区在线观看| 色综合久久九月婷婷色综合| 欧美日韩一区二区三区四区| 日韩欧美成人一区二区| 国产午夜精品美女毛片视频| 亚洲丝袜另类动漫二区| 天天综合色天天综合色h| 国产一区在线观看麻豆| 91蜜桃在线免费视频| 欧美日韩国产成人在线免费| 26uuu国产一区二区三区| 中文字幕一区二区视频| 日韩av网站在线观看| 成人aaaa免费全部观看| 欧美老女人第四色| 欧美韩日一区二区三区四区| 一区二区三区在线播| 国产一区二区三区在线观看精品 | 亚洲精品在线观看视频| 亚洲色图20p| 久久99国产精品麻豆| 97久久超碰国产精品电影| 欧美一区二区网站| 亚洲精品高清在线| 国产精品伊人色| 制服丝袜亚洲播放| 亚洲日韩欧美一区二区在线| 经典三级视频一区| 欧美日韩国产综合久久| 亚洲国产精品ⅴa在线观看| 日韩精品久久理论片| www.视频一区| 精品国产成人系列| 亚洲成人1区2区| 91丝袜高跟美女视频| 久久免费偷拍视频| 奇米影视一区二区三区| 欧美综合一区二区三区| 国产嫩草影院久久久久| 精品一区二区三区香蕉蜜桃| 欧美视频在线播放| 中文字幕日本不卡| 国产黄色成人av| 日韩欧美国产午夜精品| 亚洲高清不卡在线| 91国偷自产一区二区开放时间 | www.亚洲国产| 久久综合丝袜日本网| 青娱乐精品视频| 欧美日本一区二区三区| 亚洲精品久久嫩草网站秘色| 91在线观看高清| 成人免费小视频| 99国产精品视频免费观看| 欧美国产日本韩| 国产精品99久久久久久久女警| 日韩免费视频一区二区| 日韩精品免费专区| 91精品国产色综合久久久蜜香臀| 亚洲午夜在线视频| 欧美日韩国产高清一区二区三区| 亚洲一级二级在线| 欧美性高清videossexo| 自拍偷自拍亚洲精品播放| 99精品欧美一区二区三区小说 | 国产一区激情在线| 久久久亚洲精华液精华液精华液| 狠狠色丁香久久婷婷综合丁香| 久久久久久久久一|