汉字转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(); // 关闭流

	}
}
时间: 2024-02-19 12:47:17

汉字转0 1点阵的相关文章

Delphi中建立指定大小字体和读取该字体点阵信息的函数

由于要控制硬件,需要把矢量的汉字转化为点阵信息写入eprom或在液晶屏上 显示,因此用Delphi写了如下的函数,可以把指定的一个汉字(两个字符)转化 为点阵信息保存到文件,每个点对应一个位,有文字信息该位为1,否则为0. 目前该函数可以生成指定的大小汉字并读取成点阵字模信息保存到文件. 如ConvertToMatrix(Pchar('北'),6,18,'Font.dat')将生成12*18点阵文件 Font.dat,其中保存汉字'北'的字模.文件格式是从上到下,先行 后列,如下图,第一行保存0

打印 特殊字符文字-java 打印特殊字符拼接的文字

问题描述 java 打印特殊字符拼接的文字 最近忽然突发奇想,能不能用java打印特殊字符拼接的文字效果如下,不知有没有大神能实现 解决方案 这个关键是要能获取点阵的坐标信息,有一个二维坐标数组,输出成这种就很简单了 解决方案二: 这个很简单啊,就是不停地用System. out. print(""@""),按你这个规律打印.只要你有耐心,没有技术难点的,就是逐行打印,计算好间隔空格. 解决方案三: int[][] y = {{010}{101}{010}}; in

asp.net 常用字符串处理方法

string fox; fox.ToLower()转化成小写字母 fox.ToUpper()转化成大写字母 fox.Trim()删除前后空格 fox.Trim(trimChars)删除其它字符 fox.TrimStart()删除前空格 fox.TrimEnd()删除后空格 fox.PadLeft(10)增加左边空格,使字串达到某长度. fox.PadRight(10)增加右边空格,使字串达到某长度. fox.PadX(10,'-')增加其它字符,使字串达到某长度.X指:Left/Right fo

Java注释规范整理

原文:http://gyhgc.iteye.com/blog/225039    在软件开发的过程中总是强调注释的规范,但是没有一个具体的标准进行说明,通常都是在代码编写规范中简单的描述几句,不能作为一个代码注释检查的标准和依据,做什么都要有一个依据吗:),现在我特整理了一个<Java的注释规范>,内容来自网络.书籍和自己的实际积累. JAVA注释规范  版本/状态 作者 版本日期 1.0 ghc 2008-07-02 一.背景 1.当我们第一次接触某段代码,但又被要求在极短的时间内有效地分析

php字符串截取函数(支持中文 utf-8截取)

 代码如下 复制代码 <!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv=&qu

PHP substr 截取中文乱码的问题解决办法

文章页面的 description 是使用 substr 函数来截取220字符的,但是最后一个汉字总是乱码,而且截取出来的长度也不正确. 通过神奇的 Google 找到方法,可能是因为 substr(string,start,length),会将汉字以字符的形式截断,而造成乱码 解决方案: 使用 PHP 扩展库中的 mb_substr 方法. 注意 1.确保你的Windows/system32下有php_mbstring.dll这个文件,没有就从你Php安装目录extensions里拷入Wind

asp.net常用字符串处理函数

string   s= "$2.00 "; s.replace( "$ ", "   "); s.trim(); system.text.encoding.default.getbytecount(fox);获得字符串长度,一个汉字等于俩字符 //获得汉字的区位码 byte[] array = new byte[2]; array = system.text.encoding.default.getbytes("啊"); in

用PHP编程读取汉字点阵数据

编程|汉字|数据    背景知识:      简体中文国标字库(1981年订,中国大陆).7445个字符,其中汉字6773个,包括一级汉字3755个,二级汉字3008个.采用2字节(16位二进制)编码.      区位码:国标GB2312规定,所有的国标汉字与符号组成一个94×94的矩阵.在此方阵中,每一行称为一个"区",每一列称为一个"位",因此,这个方阵实际上组成了一个有94个区(区号分别为0 1到94).每个区内有94个位(位号分别为01到94)的汉字字符集.

PHP读取汉字点阵数据

汉字|数据 心血来潮,想模仿LCD的显示效果,写了个从点阵字库中提取汉字点阵数据的一段php脚本. 背景知识:简体中文国标字库(1981年订,中国大陆).7445个字符,其中汉字6773个,包括一级汉字3755个,二级汉字3008个.采用2字节(16位二进制)编码. 区位码:国标GB2312规定,所有的国标汉字与符号组成一个94×94的矩阵.在此方阵中,每一行称为一个"区",每一列称为一个"位",因此,这个方阵实际上组成了一个有94个区(区号分别为0 1到94).每