汉字转0 1点阵

简介:
import java.io.*;

class Test {
	private int[] unit = new int[32];
	private String yes = "1";
	private String no = "0";
	private PrintStream print = null;

	public void setYes(String str) {
		yes = str;
	}

	public void setNo(String str) {
		no = str;
	}

	private int negativeToPlus(byte b) {
		return b & 0xFF;
	}

	public void setOutputFile(String filename) throws Exception {
		print = new PrintStream(filename);
	}

	public void colseFileStream() {
		print.close();
	}

	private void readChina(char ch) { // 需要得到点阵的汉字
		byte[] buf = new byte[32];
		FileInputStream input = null;
		try {
			String string = Character.toString(ch);
			byte[] bt = string.getBytes("GBK"); // 获得国标码
			int a1 = negativeToPlus(bt[0]); // 转为无符号整数
			int a2 = negativeToPlus(bt[1]);
			int qh = a1 - 0xA0; // 得到区位码
			int wh = a2 - 0xA0;
			long offset = (94 * (qh - 1) + (wh - 1)) * 32; // 获得偏移量

			File file = new File("D:\\HZK16");
			input = new FileInputStream(file);
			input.skip(offset);
			input.read(buf, 0, 32);
			for (int i = 0; i < 32; i++)
				unit[i] = negativeToPlus(buf[i]);
			input.close();
		} catch (Exception e) {

			System.out.println("文件异常");
			e.printStackTrace();
		}

	}

	public void writeChina(char ch) { // 参数: yes是有点处显示 no是无点处显示
		int i, j, k;
		readChina(ch);
		for (j = 0; j < 16; j++) {
			for (i = 0; i < 2; i++)
				for (k = 0; k < 8; k++)
					if ((unit[j * 2 + i] & (0x80 >> k)) >= 1) // 取bit位值
					{
						System.out.print(yes);
					} else {
						System.out.print(no);
					}
			System.out.println();
		}
	}

	public void writeChinaToFile(String str) {
		try {

			int i, j, k;
			for (int x = 0; x < str.length(); x++) {
				readChina(str.charAt(x));
				for (j = 0; j < 16; j++) {
					for (i = 0; i < 2; i++)
						for (k = 0; k < 8; k++)
							if ((unit[j * 2 + i] & (0x80 >> k)) >= 1) // 取bit位值
							{
								print.print(yes+",");
							} else {
								print.print(no+",");
							}
					print.println();
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	static public void main(String[] str) throws Exception {
		Test t = new Test();
		String xp = "我";

		t.setOutputFile("D:\\123.txt"); // 确定输出 文件流
		t.writeChinaToFile(xp); // 要写的字符串
		t.colseFileStream(); // 关闭流

	}
}

目录
相关文章
|
存储
ASCII码可以表示汉字吗?
ASCII码可以表示汉字吗?
2455 0
|
1月前
ASCII编码的10个阿拉伯数字
ASCII编码的10个阿拉伯数字
10 1
|
7月前
|
图形学
|
7月前
|
关系型数据库 MySQL 数据处理
位、字节、字符与字(字母跟汉字)的爱恨情仇
位、字节、字符与字(字母跟汉字)的爱恨情仇
位、字节、字符与字(字母跟汉字)的爱恨情仇
|
算法 芯片
基于51单片机点阵汉字显示程序设计
基于51单片机点阵汉字显示程序设计
基于51单片机点阵汉字显示程序设计
验证用户名,支持中英文(包括全角字符)、数字、下划线和减号 (全角及汉字算两位),长度为4-20位,中文按二位计数
验证用户名,支持中英文(包括全角字符)、数字、下划线和减号 (全角及汉字算两位),长度为4-20位,中文按二位计数
|
存储 编解码
[oeasy]python0125_汉字打印机_点阵式打字机_汉字字形码
[oeasy]python0125_汉字打印机_点阵式打字机_汉字字形码
89 0
[oeasy]python0125_汉字打印机_点阵式打字机_汉字字形码
|
数据库
轻松解决汉字和拼音转换问题!!
轻松解决汉字和拼音转换问题!!
157 0
|
算法 前端开发 JavaScript
二进制间距
🎈每天进行一道算法题目练习,今天的题目是“二进制间距”。
115 0
|
测试技术
汉字数字转阿拉伯数字
# 问题来源 # 这个问题,是看到有人提到带中文数字的章节标题,要排序的问题引起的。比如对于: ```python title_list = [ '第一章', '第三章', '第五章', '第四章', '第二章', ] ``` 想“正确”排序的话,你直接 ``title_list.sort()`` 是不行地: ```bash zys@tower:~$ py
721 0

热门文章

最新文章