235 lines
5.8 KiB
JavaScript
235 lines
5.8 KiB
JavaScript
const gbk = require('./gbk.js');
|
||
const formatTime = date => {
|
||
const year = date.getFullYear()
|
||
const month = date.getMonth() + 1
|
||
const day = date.getDate()
|
||
const hour = date.getHours()
|
||
const minute = date.getMinutes()
|
||
const second = date.getSeconds()
|
||
|
||
return [year, month, day].map(formatNumber).join('/') + ' ' + [hour, minute, second].map(formatNumber).join(':')
|
||
}
|
||
|
||
const formatNumber = n => {
|
||
n = n.toString()
|
||
return n[1] ? n : '0' + n
|
||
}
|
||
|
||
|
||
const hexStringToBuff = str => { //str='中国:WXHSH'
|
||
//const buffer = new ArrayBuffer((sumStrLength(str)) * 4)
|
||
const buffer = new ArrayBuffer((sumStrLength(str)) + 1);
|
||
const dataView = new DataView(buffer)
|
||
var data = str.toString();
|
||
var p = 0; //ArrayBuffer 偏移量
|
||
for (var i = 0; i < data.length; i++) {
|
||
if (isCN(data[i])) { //是中文
|
||
//调用GBK 转码
|
||
// console.log(29,data[i])
|
||
var t = gbk.encode(data[i]);
|
||
for (var j = 0; j < 2; j++) {
|
||
//var code = t[j * 2] + t[j * 2 + 1];
|
||
var code = t[j * 3 + 1] + t[j * 3 + 2];
|
||
var temp = parseInt(code, 16)
|
||
//var temp = strToHexCharCode(code);
|
||
dataView.setUint8(p++, temp)
|
||
}
|
||
} else {
|
||
var temp = data.charCodeAt(i);
|
||
dataView.setUint8(p++, temp)
|
||
}
|
||
}
|
||
return buffer;
|
||
}
|
||
|
||
function toUnicode(s) {
|
||
var str = "";
|
||
for (var i = 0; i < s.length; i++) {
|
||
str += "\\u" + s.charCodeAt(i).toString(16) + "\t";
|
||
}
|
||
return str;
|
||
}
|
||
|
||
function strToHexCharCode(str) {
|
||
if (str === "")
|
||
return "";
|
||
var hexCharCode = [];
|
||
hexCharCode.push("0x");
|
||
for (var i = 0; i < str.length; i++) {
|
||
hexCharCode.push((str.charCodeAt(i)).toString(16));
|
||
}
|
||
return hexCharCode.join("");
|
||
}
|
||
|
||
function sumStrLength(str) {
|
||
var length = 0;
|
||
var data = str.toString();
|
||
for (var i = 0; i < data.length; i++) {
|
||
if (isCN(data[i])) { //是中文
|
||
length += 2;
|
||
} else {
|
||
length += 1;
|
||
}
|
||
}
|
||
return length;
|
||
}
|
||
|
||
function isCN(str) {
|
||
let characterA =/^[\u4e00-\u9fa5]+$/
|
||
let characterB = /^[\uFF01]|[\uFF0C-\uFF0E]|[\uFF1A-\uFF1B]|[\uFF1F]|[\uFF08-\uFF09]|[\u3001-\u3002]|[\u3010-\u3011]|[\u201C-\u201D]|[\u2013-\u2014]|[\u2018-\u2019]|[\u2026]|[\u3008-\u300F]|[\u3014-\u3015]+$/
|
||
if (characterA.test(str) || characterB.test(str)) {
|
||
return true;
|
||
} else {
|
||
return false;
|
||
}
|
||
}
|
||
|
||
//汉字转码
|
||
function hexStringToArrayBuffer(str) {
|
||
const buffer = new ArrayBuffer((str.length / 2) + 1)
|
||
const dataView = new DataView(buffer)
|
||
for (var i = 0; i < str.length / 2; i++) {
|
||
var temp = parseInt(str[i * 2] + str[i * 2 + 1], 16)
|
||
dataView.setUint8(i, temp)
|
||
}
|
||
dataView.setUint8((str.length / 2), 0x0a)
|
||
return buffer;
|
||
}
|
||
|
||
//返回八位数组
|
||
function subString(str) {
|
||
var arr = [];
|
||
if (str.length > 8) { //大于8
|
||
for (var i = 0;
|
||
(i * 8) < str.length; i++) {
|
||
var temp = str.substring(i * 8, 8 * i + 8);
|
||
arr.push(temp)
|
||
}
|
||
return arr;
|
||
} else {
|
||
return str
|
||
}
|
||
}
|
||
|
||
//不带有汉字
|
||
function hexStringToArrayBufferstr(str) {
|
||
let val = ""
|
||
for (let i = 0; i < str.length; i++) {
|
||
if (val === '') {
|
||
val = str.charCodeAt(i).toString(16)
|
||
} else {
|
||
val += ',' + str.charCodeAt(i).toString(16)
|
||
}
|
||
}
|
||
val += "," + "0x0a";
|
||
console.log(val)
|
||
// 将16进制转化为ArrayBuffer
|
||
return new Uint8Array(val.match(/[\da-f]{2}/gi).map(function(h) {
|
||
return parseInt(h, 16)
|
||
})).buffer
|
||
}
|
||
|
||
//换行符号
|
||
function send0X0A() {
|
||
const buffer = new ArrayBuffer(1)
|
||
const dataView = new DataView(buffer)
|
||
dataView.setUint8(0, 0x0a)
|
||
return buffer;
|
||
}
|
||
|
||
function sendDirective(arr) {
|
||
const buffer = new ArrayBuffer(arr.length)
|
||
const dataView = new DataView(buffer)
|
||
for (let i in arr) {
|
||
dataView.setUint8(i, arr[i])
|
||
}
|
||
return buffer;
|
||
}
|
||
|
||
function replaceStr(str) {
|
||
str = str.toString();
|
||
// console.log(147, str)
|
||
if (str) {
|
||
let len = getBytesLength(str);
|
||
let minLen = 4;
|
||
if (len < minLen) {
|
||
let nstr='';
|
||
for (let i = 0; i < minLen-len; i++) {
|
||
nstr = nstr + ' ';
|
||
}
|
||
str = nstr + str;
|
||
} else {
|
||
str = str;
|
||
}
|
||
} else {
|
||
str = ''
|
||
}
|
||
console.log(163, str);
|
||
return str
|
||
}
|
||
|
||
//计算打印的位置
|
||
function printTwoData(leftText, rightText) {
|
||
let sb = '';
|
||
let maxLen = 32;
|
||
let leftTextLength = getBytesLength(leftText);
|
||
let rightTextLength = getBytesLength(rightText);
|
||
let spaceLen = maxLen - leftTextLength - rightTextLength;
|
||
sb = sb + leftText;
|
||
for (let i = 0; i < spaceLen; i++) {
|
||
sb = sb + ' ';
|
||
}
|
||
sb = sb + rightText + '\n';
|
||
return sb.toString();
|
||
}
|
||
|
||
function printThreeData(leftText, centerText, rightText) {
|
||
let sb = '';
|
||
let maxLen = 32;
|
||
|
||
leftText = replaceStr(leftText);
|
||
centerText = replaceStr(centerText);
|
||
rightText = replaceStr(rightText);
|
||
|
||
let leftTextLength = getBytesLength(leftText);
|
||
let centerTextLength = getBytesLength(centerText);
|
||
let rightTextLength = getBytesLength(rightText);
|
||
let spaceLeft = maxLen/2 - leftTextLength - centerTextLength/2;
|
||
let spaceRight = maxLen/2 - centerTextLength/2 - rightTextLength;
|
||
|
||
console.log(168, leftTextLength, centerTextLength, rightTextLength, spaceLeft,spaceRight);
|
||
sb = sb + leftText;
|
||
for (let i = 0; i < spaceLeft; i++) {
|
||
sb = sb + ' ';
|
||
}
|
||
sb = sb + centerText;
|
||
for (let i = 0; i < spaceRight; i++) {
|
||
sb = sb + ' ';
|
||
}
|
||
sb = sb + rightText + '\n';
|
||
console.log('printThreeData', sb);
|
||
return sb.toString();
|
||
}
|
||
|
||
function getBytesLength(val) {
|
||
var str = new String(val);
|
||
var bytesCount = 0;
|
||
for (var i = 0, n = str.length; i < n; i++) {
|
||
var c = str.charCodeAt(i);
|
||
if ((c >= 0x0001 && c <= 0x007e) || (0xff60 <= c && c <= 0xff9f)) {
|
||
bytesCount += 1;
|
||
} else {
|
||
bytesCount += 2;
|
||
}
|
||
}
|
||
return bytesCount;
|
||
}
|
||
|
||
module.exports = {
|
||
hexStringToArrayBuffer: hexStringToArrayBuffer,
|
||
hexStringToBuff: hexStringToBuff,
|
||
sendDirective: sendDirective,
|
||
printTwoData: printTwoData,
|
||
printThreeData: printThreeData
|
||
}
|