package com.nbad.register;
import java.util.Calendar;
public class Test {
static String head = "3A30313033";
static String footer = "00000D0A";
public static void main(String[] args) {
int beginCount = 10;
Calendar c = Calendar.getInstance();
int hh = c.get(Calendar.HOUR_OF_DAY);
int mm = c.get(Calendar.MINUTE);
int mms = hh * 60 + mm;
int endCount = mms / 5;
int beginStep = 10 * 5;
int endStep = endCount * 5;
String s = intiMiddle(beginStep, 798);
System.out.println("完整的指令地址:--------------");
System.out.println(s);
String s1 = hexStr2Str(s);
System.out.println(s1);
System.out.println(str2HexStr(s1));
System.out.println("--------------------------------------");
String s_result="3A30313033313233343132333431323334333033303330333000000D0A";
System.out.println(hexStr2Str(s_result));
System.out.println(hexStr2Str(head));
}
public static String intiMiddle(int beginStep, int endStep) {
System.out.println("十进制的起始地址:" + beginStep);
System.out.println("个数" + endStep);
String begin = Integer.toHexString(beginStep);
String end = Integer.toHexString(endStep);
String begin_fix = pad(begin, 4, true);
String end_fix = pad(end, 4, true);
System.out.println("十六进制起始地址:" + begin_fix);
System.out.println("十六进制个数:" + end_fix);
char[] begins = begin_fix.toCharArray();
char[] ends = end_fix.toCharArray();
String begins_s = char2Ascii(begins);
String ends_s = char2Ascii(ends);
System.out.println("ascii起始地址:" + begins_s);
System.out.println("ascii个数:" + ends_s);
return head + begins_s + ends_s + footer;
}
private static String char2Ascii(char[] array) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < array.length; i++) {
String s = Integer.toHexString(array[i]);
sb.append(pad(s, 2, true));
}
return sb.toString();
}
public static String pad(String str, int size, boolean isprefixed) {
if (str == null)
str = "";
int str_size = str.length();
int pad_len = size - str_size;
StringBuffer retvalue = new StringBuffer();
for (int i = 0; i < pad_len; i++) {
retvalue.append("0");
}
if (isprefixed)
return retvalue.append(str).toString();
return retvalue.insert(0, str).toString();
}
/**
* 字符串转换成十六进制字符串
*
* @param String
* str 待转换的ASCII字符串
* @return String 每个Byte之间空格分隔,如: [61 6C 6B]
*/
public static String str2HexStr(String str) {
char[] chars = "0123456789ABCDEF".toCharArray();
StringBuilder sb = new StringBuilder("");
byte[] bs = str.getBytes();
int bit;
for (int i = 0; i < bs.length; i++) {
bit = (bs[i] & 0x0f0) >> 4;
sb.append(chars[bit]);
bit = bs[i] & 0x0f;
sb.append(chars[bit]);
sb.append(' ');
}
return sb.toString().trim();
}
/**
* 十六进制转换字符串
*
* @param String
* str Byte字符串(Byte之间无分隔符 如:[616C6B])
* @return String 对应的字符串
*/
public static String hexStr2Str(String hexStr) {
String str = "0123456789ABCDEF";
char[] hexs = hexStr.toCharArray();
byte[] bytes = new byte[hexStr.length() / 2];
int n;
for (int i = 0; i < bytes.length; i++) {
n = str.indexOf(hexs[2 * i]) * 16;
n += str.indexOf(hexs[2 * i + 1]);
bytes[i] = (byte) (n & 0xff);
}
return new String(bytes);
}
/**
* bytes转换成十六进制字符串
*
* @param byte[]
* b byte数组
* @return String 每个Byte值之间空格分隔
*/
public static String byte2HexStr(byte[] b) {
String stmp = "";
StringBuilder sb = new StringBuilder("");
for (int n = 0; n < b.length; n++) {
stmp = Integer.toHexString(b[n] & 0xFF);
sb.append((stmp.length() == 1) ? "0" + stmp : stmp);
sb.append(" ");
}
return sb.toString().toUpperCase().trim();
}
/**
* bytes字符串转换为Byte值
*
* @param String
* src Byte字符串,每个Byte之间没有分隔符
* @return byte[]
*/
public static byte[] hexStr2Bytes(String src) {
int m = 0, n = 0;
int l = src.length() / 2;
System.out.println(l);
byte[] ret = new byte[l];
for (int i = 0; i < l; i++) {
m = i * 2 + 1;
n = m + 1;
ret[i] = Byte.decode("0x" + src.substring(i * 2, m) + src.substring(m, n));
}
return ret;
}
/**
* String的字符串转换成unicode的String
*
* @param String
* strText 全角字符串
* @return String 每个unicode之间无分隔符
* @throws Exception
*/
public static String strToUnicode(String strText) throws Exception {
char c;
StringBuilder str = new StringBuilder();
int intAsc;
String strHex;
for (int i = 0; i < strText.length(); i++) {
c = strText.charAt(i);
intAsc = (int) c;
strHex = Integer.toHexString(intAsc);
if (intAsc > 128)
str.append("\u" + strHex);
else // 低位在前面补00
str.append("\u00" + strHex);
}
return str.toString();
}
/**
* unicode的String转换成String的字符串
*
* @param String
* hex 16进制值字符串 (一个unicode为2byte)
* @return String 全角字符串
*/
public static String unicodeToString(String hex) {
int t = hex.length() / 6;
StringBuilder str = new StringBuilder();
for (int i = 0; i < t; i++) {
String s = hex.substring(i * 6, (i + 1) * 6);
// 高位需要补上00再转
String s1 = s.substring(2, 4) + "00";
// 低位直接转
String s2 = s.substring(4);
// 将16进制的string转为int
int n = Integer.valueOf(s1, 16) + Integer.valueOf(s2, 16);
// 将int转换为字符
char[] chars = Character.toChars(n);
str.append(new String(chars));
}
return str.toString();
}
}