我想根据接收到的UDP数据的条件执行一条语句
I want to execute a statement according to the condition of the received UDP data
我已上传译文。解释不清楚。
所以我添加内容。
我想处理接收到的十六进制数据。
代码:
server.on('message', (msg, rinfo) => {
console.log(msg)
console.log(msg[0]+" "+msg[1]+" "+msg[2])
console.log(`server got: ${msg} from ${rinfo.address}:${rinfo.port}\n`);
});
输出:
<Buffer 42 41 42 43 41>
66 65 66
server got: BABCA from 127.0.0.1:58107
如果'msg'变量的第1~3个参数为41 41 42(十六进制),console.log("成功");
我想问这个。
我该怎么办?
I want to output Success if the 1st to 3rd arguments are 41 41 42 in hexadecimal, respectively. I want to write this logic.
if (msg[0] === 0x41 && msg[1] === 0x41 && msg[2] === 0x42) {
console.log("Success");
}
或者,由于您要比较的这些特定值对应于 ascii 字符代码,您也可以这样做:
if (msg.toString('ascii', 0, 3) === "AAB") {
console.log("Success");
}
使用缓冲区并使用 console.log() 将值转换为字符串时,您必须注意编码问题。当你 console.log()
msg 的第一个字节时,Node 显示它的 ASCII 值。要查看十六进制值,您需要使用 toString(16)
将字节转换为其十六进制值。这告诉节点显示字节的 16 进制(十六进制)值。
const msg = Buffer.from('4241424341', 'hex');
console.log(msg);
console.log('Hex encode first byte of msg: ' + msg.toString('hex',0,1));
console.log('ASCII encode first byte of msg: ' + msg.toString('ascii',0,1));
console.log('Hex of msg[0]: ' + msg[0].toString(16));
console.log('ASCII code of msg[0]: ' + msg[0]);
const firstThree = msg.slice(0, 3);
const compareBuffer = Buffer.from('424142', 'hex');
console.log(firstThree);
console.log(compareBuffer)
const isSuccess = compareBuffer.equals(firstThree);
console.log(isSuccess);
我已上传译文。解释不清楚。 所以我添加内容。
我想处理接收到的十六进制数据。 代码:
server.on('message', (msg, rinfo) => {
console.log(msg)
console.log(msg[0]+" "+msg[1]+" "+msg[2])
console.log(`server got: ${msg} from ${rinfo.address}:${rinfo.port}\n`);
});
输出:
<Buffer 42 41 42 43 41>
66 65 66
server got: BABCA from 127.0.0.1:58107
如果'msg'变量的第1~3个参数为41 41 42(十六进制),console.log("成功");
我想问这个。 我该怎么办?
I want to output Success if the 1st to 3rd arguments are 41 41 42 in hexadecimal, respectively. I want to write this logic.
if (msg[0] === 0x41 && msg[1] === 0x41 && msg[2] === 0x42) {
console.log("Success");
}
或者,由于您要比较的这些特定值对应于 ascii 字符代码,您也可以这样做:
if (msg.toString('ascii', 0, 3) === "AAB") {
console.log("Success");
}
使用缓冲区并使用 console.log() 将值转换为字符串时,您必须注意编码问题。当你 console.log()
msg 的第一个字节时,Node 显示它的 ASCII 值。要查看十六进制值,您需要使用 toString(16)
将字节转换为其十六进制值。这告诉节点显示字节的 16 进制(十六进制)值。
const msg = Buffer.from('4241424341', 'hex');
console.log(msg);
console.log('Hex encode first byte of msg: ' + msg.toString('hex',0,1));
console.log('ASCII encode first byte of msg: ' + msg.toString('ascii',0,1));
console.log('Hex of msg[0]: ' + msg[0].toString(16));
console.log('ASCII code of msg[0]: ' + msg[0]);
const firstThree = msg.slice(0, 3);
const compareBuffer = Buffer.from('424142', 'hex');
console.log(firstThree);
console.log(compareBuffer)
const isSuccess = compareBuffer.equals(firstThree);
console.log(isSuccess);