open/utils/util.js

235 lines
5.8 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
}