package com.handpay.core.common.util;
public class BCDASCII {
/**
* 字母'A'的ASCII编码值
*/
public final static byte ALPHA_A_ASCII_VALUE = 0x41;
/**
* 字母'a'的ASCII编码值
*/
public final static byte ALPHA_a_ASCII_VALUE = 0x61;
/**
* 数字'0'的ASCII编码值
*/
public final static byte DIGITAL_0_ASCII_VALUE = 0x30;
private BCDASCII() {
}
/**
* 从BCD编码转换成ASCII编码.
* @param bcdBuf, BCD编码缓冲区
* @param bcdOffset, BCD编码缓冲区起始偏移
* @param asciiBuf, ASCII编码缓冲区
* @param asciiOffset, ASCII编码缓冲区的起始偏移
* @param asciiLen, 采用ASCII编码时的信息长度
* @param rightAlign, 奇数个ASCII码时采用的右对齐方式标志
* @return, ASCII编码缓冲区
*/
public static void fromBCDToASCII(byte[] bcdBuf, int bcdOffset, byte[] asciiBuf, int asciiOffset, int asciiLen,
boolean rightAlignFlag) {
int cnt;
if (((asciiLen & 1) == 1) && rightAlignFlag) {
cnt = 1;
asciiLen++;
} else
cnt = 0;
for (; cnt < asciiLen; cnt++, asciiOffset++) {
asciiBuf[asciiOffset] = (byte) ((((cnt) & 1) == 1) ? (bcdBuf[bcdOffset++] & 0x0f)
: ((bcdBuf[bcdOffset] >> 4) & 0x0f));
asciiBuf[asciiOffset] = (byte) (asciiBuf[asciiOffset] + ((asciiBuf[asciiOffset] > 9) ? (ALPHA_A_ASCII_VALUE - 10)
: DIGITAL_0_ASCII_VALUE));
}
}
/**
* 从BCD编码转换成ASCII编码.
* @param bcdBuf, BCD编码缓冲区
* @param asciiLen, 统一采用ASCII编码时的信息长度
* @param rightAlignFlag, 奇数个ASCII码时采用的右对齐方式标志
* @return, ASCII编码缓冲区
*/
public static byte[] fromBCDToASCII(byte[] bcdBuf, int bcdOffset, int asciiLen, boolean rightAlignFlag) {
byte[] asciiBuf = new byte[asciiLen];
fromBCDToASCII(bcdBuf, bcdOffset, asciiBuf, 0, asciiLen, rightAlignFlag);
return asciiBuf;
}
public static String fromBCDToASCIIString(byte[] bcdBuf, int bcdOffset, int asciiLen, boolean rightAlignFlag) {
try {
return new String(fromBCDToASCII(bcdBuf, bcdOffset, asciiLen, rightAlignFlag), "GBK");
} catch (Exception e) {
throw new RuntimeException(e.getMessage(), e);
}
}
/**
* 从ASCII编码转换成BCD编码.
* @param asciiBuf, ASCII编码缓冲区
* @param asciiOffset, ASCII编码缓冲区的起始偏移
* @param asciiLen, 采用ASCII编码时的信息长度
* @param bcdBuf, BCD编码缓冲区
* @param bcdOffset, BCD编码缓冲区起始偏移
* @param rightAlignFlag, 奇数个ASCII码时采用的右对齐方式标志
*/
public static void fromASCIIToBCD(byte[] asciiBuf, int asciiOffset, int asciiLen, byte[] bcdBuf, int bcdOffset,
boolean rightAlignFlag) {
int cnt;
byte ch, ch1;
if (((asciiLen & 1) == 1) && rightAlignFlag) {
ch1 = 0;
} else {
ch1 = 0x55;
}
for (cnt = 0; cnt < asciiLen; cnt++, asciiOffset++) {
if (asciiBuf[asciiOffset] >= ALPHA_a_ASCII_VALUE)
ch = (byte) (asciiBuf[asciiOffset] - ALPHA_a_ASCII_VALUE + 10);
else if (asciiBuf[asciiOffset] >= ALPHA_A_ASCII_VALUE)
ch = (byte) (asciiBuf[asciiOffset] - ALPHA_A_ASCII_VALUE + 10);
else if (asciiBuf[asciiOffset] >= DIGITAL_0_ASCII_VALUE)
ch = (byte) (asciiBuf[asciiOffset] - DIGITAL_0_ASCII_VALUE);
else
ch = 0x00;
if (ch1 == 0x55)
ch1 = ch;
else {
bcdBuf[bcdOffset] = (byte) (ch1 << 4 | ch);
bcdOffset++;
ch1 = 0x55;
}
}
if (ch1 != 0x55)
bcdBuf[bcdOffset] = (byte) (ch1 << 4);
}
public static void fromASCIIToBCD(String asciiStr, int asciiOffset, int asciiLen, byte[] bcdBuf, int bcdOffset,
boolean rightAlignFlag) {
try {
byte[] asciiBuf = asciiStr.getBytes("GBK");
fromASCIIToBCD(asciiBuf, asciiOffset, asciiLen, bcdBuf, bcdOffset, rightAlignFlag);
} catch (Exception e) {
throw new RuntimeException(e.getMessage(), e);
}
}
/**
* 从ASCII编码转换成BCD编码.
* @param asciiBuf, ASCII编码缓冲区
* @param asciiOffset, ASCII编码缓冲区的起始偏移
* @param asciiLen, 统一采用ASCII编码时的信息长度
* @param rightAlignFlag, 奇数个ASCII码时采用的右对齐方式标志
* @return, BCD编码缓冲区
*/
public static byte[] fromASCIIToBCD(byte[] asciiBuf, int asciiOffset, int asciiLen, boolean rightAlignFlag) {
byte[] bcdBuf = new byte[(asciiLen + 1) / 2];
fromASCIIToBCD(asciiBuf, asciiOffset, asciiLen, bcdBuf, 0, rightAlignFlag);
return bcdBuf;
}
public static byte[] fromASCIIToBCD(String asciiStr, int asciiOffset, int asciiLen, boolean rightAlignFlag) {
try {
byte[] asciiBuf = asciiStr.getBytes("GBK");
return fromASCIIToBCD(asciiBuf, asciiOffset, asciiLen, rightAlignFlag);
} catch (Exception e) {
throw new RuntimeException(e.getMessage(), e);
}
}
}
分享到:
相关推荐
JAVA二进制字节数组字符十六进制BCD编码转换
BCD 即BCD代码。Binary-Coded Decimal,简称BCD,称BCD码或二-十进制代码,亦称二进码十进数。...此外,对于其他需要高精确度的计算,BCD编码亦很常用。 ASCII ASCII(American Standard Code for In
包括大小字母转换、时间戳转换、ASCII和BCD互相转换、BCD到无符号长整型数互相转换、基本异或操作、CRC算法、MD5、SHA1、SHA224、SHA256、SHA384、SHA512、DES/3DES、MAC算法、RSA算法、SM算法:SM2/SM3/SM4、中文到...
表1-4 BCD码与⼗进制数的对应关系 Unicode编码 ASCII码提供了128个字符,扩展的ASC码提供了256个字符,但⽤来表⽰世界各国的⽂字编码还显得不够,还需要表⽰更多的字符和意义,因 此⼜出现了Unicode编码。...
这个一个 小巧的各种码制转换小工具, 可以实现,ASCII 码查询,整数的,2进制,8进制,10进制,16进制之间互相转换, 硬编码 BCD码,GRAY码,BIN自然码之间的互相转换; 转换的同时可以实现2,8,10,16进制格式显示; 适用与串口...
浙江大学 逻辑与计算机设计基础 学习复习要点 共9章,分列了要点。 第一章 数字计算机与信息 1. 数字系统:数字信号,...十进制数的二进制编码:BCD码 字符编码:ASCII 5. 各种信息的编码 第二章 组合逻辑电路 。。。
第一章 单片微型计算机概述 教学内容: 1.1、单片微型计算机发展概况...6、熟悉BCD 码和ASCII 码 教学重点: 1、单片机的含义及作用 2、补码的概念及运算 3、BCD 码及ASCII 码 教学难点: 1、数制间的转换 2、补码的运算
"授课日期 " 第 1 周 星期 三 第 1-2 "教学用时 "2 学时 " " "节 " " " "教学内容 "数制、编码 " "(学习情境 " " ") " " "教学目的 "掌握二进制、十六进制数的转换和BCD、ASCII码 " "及要求 " " "教学重点 " 进制...
把十进制数转换为其等值的二进制数称之为BCD编码(如表1.1所示)。 表1.1 BCD码与其它数制的对应关系 根据上述说明,一个十进制数,能够很方便地用BCD码来表示。例如,十进制数859用BCD码...
单片机系统设计课程实验二 51单片机与PC机通信实验 实验目的 熟悉51单片机串口功能控制,同时掌握ASCII码的编码方法、16进制数与BCD码之间的转换。 实验内容 设定单片机串口为工作模式1,波特率为9600,数据位8位,...
掌握不同进程数及编码相互转换的程序设计方法,加深对数码转换的理解; 2.进一步熟悉键盘使用方法; 3. 进一步熟悉调试程序的方法 二. 实验设备 装有汇编软件的IBMPC 机一台 实验内容 将ASCII码表示的十进制数转换...
计算机中最常用的字符信息编码是( A ) A ASCII B BCD码 C 余3码 D 循环码 2.要MCS-51系统中,若晶振频率屡8MHz,一个机器周期等于(A ) μs A 1.5 B 3 C 1 D 0.5 3.MCS-51的时钟最高频率是 ( A ). A 12MHz B 6 MHz...
2、在微型计算机中,应用最普遍的字符编码是 A) ASCII码 B)BCD码 C)汉字编码 D)补码 3、计算机病毒可以使整个计算机瘫痪,危害极大。计算机病毒是 A) 一条命令 B)一段特殊的程序 C)一种生物病毒 D)一种芯片 4...
2、在微型计算机中,应用最普遍的字符编码是 A) ASCII码 B)BCD码 C)汉字编码 D)补码 3、计算机病毒可以使整个计算机瘫痪,危害极大。计算机病毒是 A) 一条命令 B)一段特殊的程序 C)一种生物病毒 D)一种芯片 4、...
14.7.1 二进制码与ASCII码的转换 14.7.2 二进制码到BCD码的转换 14.7.3 BCD码到二进制码的转换 14.8 数字滤波 14.8.1 算术平均值法 14.8.2 滑动平均值法 14.8.3 防脉冲干扰平均值法 第15章 MCS—51应用系统设计、...
单片机原理与控制技术 第2版 第1章 微型计算机系统基本知识 本章要点: 微型计算机和单片机的发展概况 单片机系统组成概述(CPU、总线、存储器和I/O口等) 二进制、十进制和十六... 单片机常用编码(BCD码、ASCII码)
ASCII编码器/解码器 二进制编码器/解码器(a-> 01100001) 十六进制编码器/解码器 八进制编码器/解码器 反向文本(abc def-> fed cba)编码器/解码器 大写文本(abc-> ABC)编码器/解码器 小写文本(ABC-> abc)...
微机原理与接口技术复习指导 第1章绪论 1,了解微机系统组成及基本工作原理; 2,熟悉数制及其转换方法; 3,熟悉二进制数的加减运算和...码、BCD数、ASCII码)及其数值范围; 5,熟悉补码的运算规则及溢出的判断方法。
(4)了解 BCD 码的编码方法、转换关系和加减法运算时的修正方法;了解 ASCII 码 和查表换算的方法。 (5)了解单片机应用系统的开发过程和研发工具(Proteus、keil 软件) 。 【教学重点】 单片机开发的一般过程。...
了解BCD码的编码方法、转换关系和加减法运算时的修正方法;了解ASCII码和查表换算 的方法。 了解单片机应用系统的开发过程和研发工具(Proteus、keil 软件)。 【教学重点】 单片机开发的一般过程。 【教学难点】 ...