1. 取一个数字的某一个 bit 位
/**
* @description 取一个数字的某一个bit位
* @param num
* @param index
* @returns
*/
export function getHexBit(num: any, index: number) {
num = parseInt(num);
let numStr = num.toString(2).split("").reverse().join("");
if (numStr.length < 8) {
for (let i = 0; i < 8 - numStr.length; ++i) {
numStr = numStr + "0";
}
}
const bit = numStr.charAt(index);
console.log("getHexBit", num, index, numStr, bit);
return parseInt(bit);
}
2. 字符串转 buffer
/**
* 传入字符串,取每一个字符的ASCII码,放到数组中,返回数组
* @param {string} str - 输入的字符串
* @returns {number[]} - 每一个字符的ASCII码组成的数组
*/
export const nameToNumberArr = (name: string): any[] => {
let bufferNameArr = [];
const encoder = new TextEncoder(); // 创建TextEncoder实例
const uint8Array = encoder.encode(name); // 将字符串转换为UTF-8编码的Uint8Array
bufferNameArr = Buffer.from(uint8Array).toJSON().data; // 将Uint8Array转换为Buffer
if (bufferNameArr.length < 20) {
const addArr = new Array(20 - bufferNameArr.length).fill(0x00)
bufferNameArr = [...bufferNameArr, ...addArr]
}
console.log(Buffer.from(bufferNameArr).toString());
return bufferNameArr
};
3. buffer 转为 字符串(汉字)
// buffer 转为汉字
export const getNameFromBuffer = (buffer: any) => {
const nameBuffer = []
for (let i = 0; i < buffer.length; i++) {
if (buffer[i] !== 0 && buffer[i] !== 255) {
nameBuffer.push(Number(buffer[i]))
}
}
console.log(Buffer.from(buffer).toString());
return nameBuffer.length ? Buffer.from(nameBuffer).toString() : ''
}
4. 取一个数字的高位和地位
/**
* @desc 取一个数字的 高位和低位
*/
export function getNumHLVal(num: number): Number[] {
// 使用位操作获取高位和低位
const highBit = (num >> 8) & 0xFF; // 右移8位,然后与0xFF进行AND操作以获取高位的8个bit
const lowBit = num & 0xFF; // 与0xFF进行AND操作以获取低位的8个bit
return [highBit, lowBit]
}
5. buffer 数组转 16进制
function uint8ArrayToHexString(uint8Array: Uint8Array) {
let hexString = "";
for (let i = 0; i < uint8Array.length; i++) {
let hex = uint8Array[i].toString(16);
if (hex.length === 1) {
hex = "0" + hex;
}
hexString += hex;
}
return hexString;
}
6. 创建一个串口通信
const { SerialPort, InterByteTimeoutParser, ReadlineParser } = require("serialport");
// 获取串口列表
const list = await SerialPort.list();
// 建立一个串口通信
const options = {
path: port,
baudRate: 115200 || baudRate,
dataBits: dataBits,
stopBits: stopBits,
parity: parity,
flowControl: flowControl,
autoOpen: true
};
console.log('serialport options:', options);
manager.serialHandler = new SerialPort(options, (err) => {
if (err) {
console.log('open serial failed');
return
}
console.log('open serial successfully');
});
// 监听串口打开
manager.serialHandler.on("open", function (err) {
if (err) {
console.log('Serialport opened fail ');
return
}
console.log("Serialport opened successfully");
manager.interfaceQueryByCom();
ipc.notify({
action: "serialportStatus",
status: "connected",
});
});
// 监听串口数据回复
manager.serialHandler.on("data", (data) => {
console.log(data)
})
// 监听串口关闭
manager.serialHandler.on("close", function () {
console.log("Serialport closed ");
ipc.notify({
action: "serialportStatus",
status: "disconnected",
});
});
// 串口发送数据
manager.serialHandler.write(data, (err) => {
if (err) {
console.log('send data to serial port error--->', err);
return
}
console.log('write data to serial port success--->');
});
// 监听串口发送数据完成
manager.serialHandler.drain((err) => {
if (err) return
console.log('send data to serial port end--->');
})
7、创建一个 tcp 通信
const net = require("net");
const options = {
port: this.port,
host: this.ip,
keepAlive: true,
initialDelay: 10000,
noDelay: true,
};
// 创建 TCP 连接
this.client = net.createConnection(options, () => {
console.log("----->");
console.log("tip connecting");
logger.info("创建连接服务器中");
});
// 监听创建 tcp 连接成功回复
this.client.on("connect", () => {
console.log("hub connect success");
});
// 监听 tcp 回复
this.client.on("data", (data) => {
const hexString = data.toString("hex").toUpperCase();
const hexStringWithSpaces = hexString.match(/.{1,2}/g).join(" ");
})
// 发送数据
this.client.write(sndData);