Articles of 二进制

关于二进制序列化和反序列化的问题

我想创build一个能高效地序列化和反序列化一个Buffer的模块。 所以我在问自己几个问题。 使用序列化和反序列化函数创build一个ES6类,处理按位运算符,还是必须使用像concetrate或dissolve这样的模块,是一个好的操作? 哪种手术更好? 我已经找了一个NPM包,可以有效地序列化和反序列化ZCL缓冲区,我发现了像“binary-parser”这样看起来不错的东西,但是可能会很重,因为ZCL群集有多个不同的字节执行。 那么有没有什么东西,而不是只有序列化或反序列化,会做呢?

zerorpc:如何将string数据从python转换为节点

我需要从nodejs中调用一个python脚本并获取结果。 我发现了似乎很适合的zerorpc库。 python脚本返回一个string数组,但在节点中我得到了二进制数据的对象。 这是pythonzerorpc服务器: # python zerorpc server import zerorpc class HelloRPC(object): def test(self): return ["A", "B", "C"] server = zerorpc.Server(HelloRPC()) serrver.bind("tcp://0.0.0.0:4242") server.run() 这是节点zerorpc客户端: // nodejs zerorpc client var zerorpc = require("zerorpc") var client = new zerorpc.Client(); client.connect("tcp://127.0.0.1:4242"); client.invoke("test", function(error, response, more) { if (response) { for (var i = 0; i < response.length; i++) […]

Nodejs缓冲区:如何读出位标志?

我正在监听一个TCP套接字上的数据事件。 每个数据事件都为我提供了一个协议帧的缓冲区。 第一个字节作为标题,并包含一些我想访问的标志。 直到那里监听数据事件,并获得第一个字节看起来像: socket.on('data', function(buff) { console.log(buff[0]); // returns 129 }); 如果我现在想检查第一位,那么我必须将129转换为位格式,然后检出第一个数字。 129 => 1000 0001 | 正如我们所知,JavaScript不支持二进制文件。 我现在想知道如果节点缓冲区对象允许我工作位智者,如果是的话,这将是什么样子? 问候

node.js缓冲区的二进制输出是不同的

这让我很困惑。 我在node.js中有以下套接字服务器(简化): net.createServer(function (socket) { socket.on('data', function (data) { var replyData = new Buffer('78780E00C425BA53269830303000006C2D0D0A', 'hex').toString('binary'); socket.end(replyData); }); }).listen(config.port); 我期望它回复任何客户端是在缓冲区中以hex指定的二进制文件,但实际上它回复:78780E00C38425C2BA5326C298303030006C2D0D0A 这是相似的,但不完全是它应该发送。 我错过了什么?

接收和解释hex数据时发生内容types为application / octet-stream错误

我正尝试将二进制数据发送到Azure移动服务API。 当我们收到请求并尝试parsing数据时,高于7f的字节值(即80,81,90,ff等)被解释为不同。 例如,如果我们已经发送 Sent data : 67 01 00 00 31 00 31 00 32 00 31 00 00 00 A0 10 Received data: 67 01 00 00 31 00 31 00 32 00 31 00 00 00 ef bf bd 10 这是curl命令: curl –header "Content-Type:application/octet-stream" -X POST https://xxxx/Api/temp –data-binary @/home/device_data.txt Nodejs移动服务脚本代码片段 exports.post = function(request, […]

Node.js如何从MS Sql server数据types的varbinary转换为图像

我访问存储在varbinary列中的图像的第三方数据库。 我正在编写node.js应用程序,以将存储在MS Sql服务器中的varbinary图像恢复为.jpg文件。 当我查询varbinary返回缓冲区,但从缓冲区我不能够恢复图像到.jpg文件。 对于MS Sql服务器访问,我使用https://www.npmjs.com/package/mssql libray。 [更新:] :下面是我试图转换和保存为图像的一些方法。 var decodedImage = new Buffer(varbinaryBufferReturedFromDatabase, 'base64'); var decodedImage = new Buffer(varbinaryBufferReturedFromDatabase, 'hex'); var decodedImage = new Buffer(varbinaryBufferReturedFromDatabase, 'uft8'); var decodedImage = varbinaryBufferReturedFromDatabase.toString('hex'); var decodedImage = varbinaryBufferReturedFromDatabase.toString('base64'); var decodedImage = varbinaryBufferReturedFromDatabase.toString('uft8'); fs.writeFile(__dirname+'/../public/images/img3.jpg', decodedImage, function(err, data){ if (err) throw err; console.log('It\'s saved!'); cb(data); });

Node.js缓冲区和二进制文件

我正在使用Node读取一个文件,并尝试将其作为多部分MIME邮件发送,但遇到文件在接收端出现损坏的问题。 我读了这个文件,准备发送这样的文件: fs.readFile("before.png", function(err,data) { // Snip content += data.slice(0,data.length); 问题是,似乎填补了stream。 请参阅下面的图像,将之前的源文件与在目的地处收到的文件进行比较。 EF BF BD的序列表明.slice()没有给我底层的字节,可能强制UTF-8编码。 我也尝试通过toString()获取字节,但没有豆。 我仍然看到在上传的文件中的腐败。 // content += data.toString() // UTF-8 default content += data.toString('binary') 我怀疑默认的toString()也强制二进制文件为UTF-8,但会期望“二进制”给我的底层字节stream? 编辑回应布拉德。 我尝试concattin'g但我仍然需要翻译我的对象回到一个string,在这一点上的UTF-8字符似乎重新出现在stream中。 contentToSend = Buffer.concat([ header, data, footer ] ); this.oauth.post( endpoint, accessToken, accessTokenSecret, contentToSend.toString(), contentType, function( x, y, z ) {

为什么从java切换到javascript时字节数组更新

我正在使用一个将二进制数据发送到Ponte(Node.js)应用程序的工具,该应用程序将此消息(未经更改)转发给AMQP代理。 总的来说它是:Java – > JavaScript – > Java我有一个奇怪的二进制数据转换。 以下是HEX值的顺序: 当我准备一个二进制数据集时,它看起来像这样: [4, -30, -30, -9, -115, 0, 1, 0, 1, 0, 96, -32, 46, 0, 0, 0] 当它到达JavaScript(庞特)它看起来像这样: [4, 226, 226, 247, 141, 0, 1, 0, 1, 0, 96, 224, 46, 0, 0, 0] 在这里,负小数变成正数小数。 如果你“减去”这些值,那么你可以看到它们的值是256 现在我通过AMQP代理将这些数据从JavaScript发回到Java。 在Java中,我的二进制数据现在看起来像这样: [4, -17, -65, -67, -17, -65, -67, -17, […]

读取node.js中的二进制数据

在读取node.js中的二进制数据时遇到问题 这就是我所做的: $ cat test.js var fs = require('fs'), binary = fs.readFileSync('./binary', 'binary').toString('binary'); process.stdout.write(binary.substring(0, 48)); $ xxd binary 00000000: 7f45 4c46 0201 0100 0000 0000 0000 0000 .ELF………… 00000010: 0300 3e00 0100 0000 0008 0000 0000 0000 ..>…………. 00000020: 4000 0000 0000 0000 10a0 0000 0000 0000 @…………… $ node test.js | xxd 00000000: 7f45 […]

通过二进制套接字发送Uint16Array表单浏览器到node.js

我想通过一个二进制套接字从浏览器发送types化数组( Uint16Array )到node.js,但是当我在节点中接收它们时,我得到了不连贯的值。 我读了大量的文档,但有一些我不明白… 这是浏览器端代码: var ws = new WebSocket('ws://127.0.0.1:8080'); ws.binaryType = "arraybuffer"; var message = new Uint16Array(3); message[0] = 123; message[1] = 456; message[2] = 789; ws.onopen = function() { ws.send(message.buffer); }; 这是服务器代码(我使用https://github.com/einaros/ws ): var WebSocketServer = require('ws').Server; var wss = new WebSocketServer({port: 8080}); wss.on('connection', function(ws) { ws.on('message', function(buffer, flags) { var message = […]