gpt4 book ai didi

c - Node : How to send 16bit binary information

转载 作者:行者123 更新时间:2023-11-30 17:02:15 24 4
gpt4 key购买 nike

我有一个从套接字读取二进制命令的服务器程序。发送到套接字的缓冲区需要对其数据进行非常具体的排序。这是来自提供的示例客户端应用程序的一些 C 代码,其中显示了需要发送的数据的顺序和大小。

typedef   unsigned char     u8;
typedef unsigned short u16;
typedef unsigned int u32;

typedef struct JobNodeInfo_s {
u16 jNodeInfoType; /* per END device, per router, whole system */
u8 value[32]; /* mac address / barcode value / Location */
} JobNodeInfo_t;

typedef struct JobHdrFormat_s {
u16 jPreamble;
JobCommandType_t jCmd;
u16 jBatchID; /* for logging */
u16 jSeq;
u16 priority;
u16 option; /* option field could be reserved for future extension */
JobNodeInfo_t jNodeInfo;
u16 jLen;

} JobHdrFormat_t;

JobHdrFormat_s 结构作为空指针传递到套接字:

send(connfd, (void*)jFormat, sizeof(JobHdrFormat_t) + jFormat->jLen , 0);

现在,我需要在 Node.js 中复制此缓冲区。我研究过 Node Buffer 类,但注意到它只支持八位字节。正如您所看到的,大多数内存插槽都是为 16 位整数保留的。 Node.js 是否可以像 C 代码那样按照我需要的方式排列数据?我在这里进行了第一次尝试:

var net = require( 'net' );
var client = new net.Socket();
client.connect( 13929, '192.168.2.2', function() {
var mac_addr = "041511000960",
outgoing_str = "FE9C00020000001100000004"
+ mac_addr
+ "0000",
outgoing_buf = new Buffer( outgoing_str.length, "hex" );
var new_buff_arr = [];
for ( var i = 0, il = outgoing_str.length; i < il; i += 2 ) {
var cmd_substr = "0x" + outgoing_str.substring( i, i + 2 ),
i_cmd_substr = parseInt( cmd_substr );
console.log( "substr: " + cmd_substr + " int: " + i_cmd_substr );
new_buff_arr.push(i_cmd_substr);
}
const buf = new Buffer(new_buff_arr);
client.write( buf ,
function() {
console.log( "data is written" );
}
);
});

client.on('data', function( data ) {
console.log('Received: ' + data.toString( "hex" ));
});

client.on('close', function() {
console.log( 'Connection closed' );
});

或多或少,我尝试将缓冲区写入字符串,循环遍历它,将每两个“字节”写入单个十六进制值,然后将它们转换回数字并将缓冲区写出。如果 Node 只能使用八位字节,这是否可能?如果您需要更多信息,请告诉我。

最佳答案

看看this :

[The] jBinary [is a] library for working with binary data in JavaScript, allows loading data from any source with automatically detected best supported way on current browser or Node.js

然后再看看jBinary library Typesets ...

我没有使用 jBinary 和 Node.js 的经验。但我对这些功能很感兴趣,而且我现在已经找到了这个解决方案。

关于c - Node : How to send 16bit binary information,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36629935/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com