<tfoot id='6WlDe'></tfoot>
    • <bdo id='6WlDe'></bdo><ul id='6WlDe'></ul>

    <small id='6WlDe'></small><noframes id='6WlDe'>

    <i id='6WlDe'><tr id='6WlDe'><dt id='6WlDe'><q id='6WlDe'><span id='6WlDe'><b id='6WlDe'><form id='6WlDe'><ins id='6WlDe'></ins><ul id='6WlDe'></ul><sub id='6WlDe'></sub></form><legend id='6WlDe'></legend><bdo id='6WlDe'><pre id='6WlDe'><center id='6WlDe'></center></pre></bdo></b><th id='6WlDe'></th></span></q></dt></tr></i><div id='6WlDe'><tfoot id='6WlDe'></tfoot><dl id='6WlDe'><fieldset id='6WlDe'></fieldset></dl></div>
      <legend id='6WlDe'><style id='6WlDe'><dir id='6WlDe'><q id='6WlDe'></q></dir></style></legend>

      在纠正用 Javascript (node.js) 编写的 CRC-ITU 检查方法中的问题时需要帮助

      时间:2023-10-20
    1. <small id='STf36'></small><noframes id='STf36'>

        <legend id='STf36'><style id='STf36'><dir id='STf36'><q id='STf36'></q></dir></style></legend>

              <tbody id='STf36'></tbody>

              <i id='STf36'><tr id='STf36'><dt id='STf36'><q id='STf36'><span id='STf36'><b id='STf36'><form id='STf36'><ins id='STf36'></ins><ul id='STf36'></ul><sub id='STf36'></sub></form><legend id='STf36'></legend><bdo id='STf36'><pre id='STf36'><center id='STf36'></center></pre></bdo></b><th id='STf36'></th></span></q></dt></tr></i><div id='STf36'><tfoot id='STf36'></tfoot><dl id='STf36'><fieldset id='STf36'></fieldset></dl></div>
                <bdo id='STf36'></bdo><ul id='STf36'></ul>

              • <tfoot id='STf36'></tfoot>
                本文介绍了在纠正用 Javascript (node.js) 编写的 CRC-ITU 检查方法中的问题时需要帮助的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                问题描述

                我们正在尝试在 Javascript 上编写 GPS 设备侦听器.

                We are trying to code GPS device listener on Javascript.

                在执行此操作时,我们无法为 CRC-ITU 错误检查开发正确的脚本.从协议文档生成crc代码的解释如下

                While doing this, we are unable to develop the right script for the CRC-ITU error check. The explanation for the crc code generation from protocol document is as below

                终端或服务器可以使用校验码来区分接收到的信息是否错误.为了防止错误在数据传输过程中发生,错误检查被添加到对数据误操作,以提高安全性和效率系统.校验码由CRC-ITU校验方法生成.协议结构中数据的校验码,来自信息序列号的数据包长度(包括数据包Length"和Information Serial Number")是 CRC-ITU 的值.CRC计算接收到的信息时发生错误,接收方将忽略并丢弃数据包.

                A check code may be used by the terminal or the server to distinguish whether the received information is error or not. To prevent errors occur during data transmission, error check is added to against data misoperation, so as to increase the security and efficiency of the system. The check code is generated by the CRC-ITU checking method. The check codes of data in the structure of the protocol, from the Packet Length to the Information Serial Number (including "Packet Length" and "Information Serial Number") , are values of CRC-ITU. CRC error occur when the received information is calculated, the receiver will ignore and discard the data packet.

                我们参考了协议文档中给出的C代码示例-

                We referred to the C code sample given in the protocol document -

                // calculate the 16-bit CRC of data with predetermined length. 
                
                U16 GetCrc16(const U8* pData, int nLength) 
                { 
                   U16 fcs = 0xffff; // initialization 
                   while(nLength>0)
                   { 
                     fcs = (fcs >> 8) ^ crctab16[(fcs ^ *pData) & 0xff]; 
                     nLength--; 
                     pData++; 
                   } 
                   return ~fcs; // negated 
                }
                

                数组 crctab16 与我们的代码示例中提到的数组相同

                the array crctab16 is the array same as mentioned in our code sample

                    Incoming data string comes in following format
                
                    Example of data packet sent by the terminal 78 78 0D 01 01 23 45 67 89 01 23 45 00 01 8C DD 0D 0A
                
                    Explanation
                
                    Start Bit - 0x78 0x78
                    Length - 0x0D
                    Protocol - 0x01
                    Terminal ID - 0x01 0x23 0x45 0x67 0x89 0x01 0x23 0x45
                    Serial No - 0x00 0x01
                    Error - 0x8C 0xDD
                    Stop Bit - 0x0D 0x0A
                

                我们的 Javascript 代码如下

                Our Javascript code below

                var net = require('net');
                
                net.createServer(function(socket) 
                {
                
                    socket.setEncoding('hex');
                
                    // New client connection event
                    socket.on('connect', function(data)
                
                    // Incoming data event
                    socket.on('data', function(data) 
                    {
                        console.log("Client said: " + data); // server log
                        data_p = data.substring(4,28);
                        err_code = crc16(data_p);
                        console.log("error: " + err_code);
                    });
                
                
                    // Disconnect event
                    socket.on('end', function()
                    {
                        //Log it to the server output
                        console.log("someone left us." + socket.remoteAddress);
                    });
                
                }).listen(3006);
                
                console.log("TCP ECHO SERVER STARTED ON 3006");
                
                
                
                
                
                function crc16(buf)
                {
                
                    var crcTable = 
                    [
                        0X0000, 0X1189, 0X2312, 0X329B, 0X4624, 0X57AD, 0X6536, 0X74BF, 0X8C48, 0X9DC1, 0XAF5A, 
                        0XBED3, 0XCA6C, 0XDBE5, 0XE97E, 0XF8F7, 0X1081, 0X0108, 0X3393, 0X221A, 0X56A5, 0X472C, 
                        0X75B7, 0X643E, 0X9CC9, 0X8D40, 0XBFDB, 0XAE52, 0XDAED, 0XCB64, 0XF9FF, 0XE876, 0X2102, 
                        0X308B, 0X0210, 0X1399, 0X6726, 0X76AF, 0X4434, 0X55BD, 0XAD4A, 0XBCC3, 0X8E58, 0X9FD1, 
                        0XEB6E, 0XFAE7, 0XC87C, 0XD9F5, 0X3183, 0X200A, 0X1291, 0X0318, 0X77A7, 0X662E, 0X54B5, 
                        0X453C, 0XBDCB, 0XAC42, 0X9ED9, 0X8F50, 0XFBEF, 0XEA66, 0XD8FD, 0XC974, 0X4204, 0X538D, 
                        0X6116, 0X709F, 0X0420, 0X15A9, 0X2732, 0X36BB, 0XCE4C, 0XDFC5, 0XED5E, 0XFCD7, 0X8868, 
                        0X99E1, 0XAB7A, 0XBAF3, 0X5285, 0X430C, 0X7197, 0X601E, 0X14A1, 0X0528, 0X37B3, 0X263A, 
                        0XDECD, 0XCF44, 0XFDDF, 0XEC56, 0X98E9, 0X8960, 0XBBFB, 0XAA72, 0X6306, 0X728F, 0X4014, 
                        0X519D, 0X2522, 0X34AB, 0X0630, 0X17B9, 0XEF4E, 0XFEC7, 0XCC5C, 0XDDD5, 0XA96A, 0XB8E3, 
                        0X8A78, 0X9BF1, 0X7387, 0X620E, 0X5095, 0X411C, 0X35A3, 0X242A, 0X16B1, 0X0738, 0XFFCF, 
                        0XEE46, 0XDCDD, 0XCD54, 0XB9EB, 0XA862, 0X9AF9, 0X8B70, 0X8408, 0X9581, 0XA71A, 0XB693, 
                        0XC22C, 0XD3A5, 0XE13E, 0XF0B7, 0X0840, 0X19C9, 0X2B52, 0X3ADB, 0X4E64, 0X5FED, 0X6D76, 
                        0X7CFF, 0X9489, 0X8500, 0XB79B, 0XA612, 0XD2AD, 0XC324, 0XF1BF, 0XE036, 0X18C1, 0X0948, 
                        0X3BD3, 0X2A5A, 0X5EE5, 0X4F6C, 0X7DF7, 0X6C7E, 0XA50A, 0XB483, 0X8618, 0X9791, 0XE32E, 
                        0XF2A7, 0XC03C, 0XD1B5, 0X2942, 0X38CB, 0X0A50, 0X1BD9, 0X6F66, 0X7EEF, 0X4C74, 0X5DFD, 
                        0XB58B, 0XA402, 0X9699, 0X8710, 0XF3AF, 0XE226, 0XD0BD, 0XC134, 0X39C3, 0X284A, 0X1AD1, 
                        0X0B58, 0X7FE7, 0X6E6E, 0X5CF5, 0X4D7C, 0XC60C, 0XD785, 0XE51E, 0XF497, 0X8028, 0X91A1, 
                        0XA33A, 0XB2B3, 0X4A44, 0X5BCD, 0X6956, 0X78DF, 0X0C60, 0X1DE9, 0X2F72, 0X3EFB, 0XD68D, 
                        0XC704, 0XF59F, 0XE416, 0X90A9, 0X8120, 0XB3BB, 0XA232, 0X5AC5, 0X4B4C, 0X79D7, 0X685E, 
                        0X1CE1, 0X0D68, 0X3FF3, 0X2E7A, 0XE70E, 0XF687, 0XC41C, 0XD595, 0XA12A, 0XB0A3, 0X8238, 
                        0X93B1, 0X6B46, 0X7ACF, 0X4854, 0X59DD, 0X2D62, 0X3CEB, 0X0E70, 0X1FF9, 0XF78F, 0XE606, 
                        0XD49D, 0XC514, 0XB1AB, 0XA022, 0X92B9, 0X8330, 0X7BC7, 0X6A4E, 0X58D5, 0X495C, 0X3DE3, 
                        0X2C6A, 0X1EF1, 0X0F78
                    ];
                
                
                    crcX = parseInt("FFFF",16);
                    cr1 = parseInt("FF",16);
                    cr2 = parseInt("FFFF",16);
                    i = 0;
                
                    while(i < buf.length)
                    {
                        str = buf.substring(i,i+4);
                        console.log("str "+str);
                        str_hex = parseInt(str,16);
                
                        j = (crcX ^ str_hex) & cr1;
                        crcX = (crcX >> 8) ^ crcTable[j] ;
                
                        i = i + 4;
                    }
                
                    crcX = ~crcX;
                
                    console.log("crcX - " + crcX.toString(16));
                    return crcX;
                }
                

                请在下面找到输入字符串对以及应该由函数 crc16 生成的相应代码

                Please find below pairs of inputs strings and the corresponding code that should be generated by the function crc16

                    78780d01035889905017664600267bf90d0a - 7bf9
                    78780d010358899050176646002ab1950d0a - b195
                    78780d010358899050176646002ba01c0d0a - a01c
                

                请帮助我们找出代码中的错误.

                Please help us find the errors in our code.

                非常感谢.

                推荐答案

                原代码中的 ~ 之所以有效,是因为它是 16 位类型.您应该使用 crcX = crcX ^ 0xffff 而不是 crcX = ~crcX.

                The ~ in the original code only worked because it was a 16-bit type. You should use crcX = crcX ^ 0xffff instead of crcX = ~crcX.

                您的 buf.substring(i,i+4)i = i + 4 也是错误的.您需要一次处理一个字节,即两个十六进制数字.这些都应该是 i+2.

                Also your buf.substring(i,i+4) and i = i + 4 is wrong. You need to process one byte at a time, which is two hexadecimal digits. Those should both be i+2.

                这篇关于在纠正用 Javascript (node.js) 编写的 CRC-ITU 检查方法中的问题时需要帮助的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                上一篇:经度读数以 1x10^-7 度 lsb 为单位测量,带符号 2 的补码 下一篇:如何在 Postman 中编写全局函数

                相关文章

              • <legend id='ClNhB'><style id='ClNhB'><dir id='ClNhB'><q id='ClNhB'></q></dir></style></legend>

                  <i id='ClNhB'><tr id='ClNhB'><dt id='ClNhB'><q id='ClNhB'><span id='ClNhB'><b id='ClNhB'><form id='ClNhB'><ins id='ClNhB'></ins><ul id='ClNhB'></ul><sub id='ClNhB'></sub></form><legend id='ClNhB'></legend><bdo id='ClNhB'><pre id='ClNhB'><center id='ClNhB'></center></pre></bdo></b><th id='ClNhB'></th></span></q></dt></tr></i><div id='ClNhB'><tfoot id='ClNhB'></tfoot><dl id='ClNhB'><fieldset id='ClNhB'></fieldset></dl></div>
                  • <bdo id='ClNhB'></bdo><ul id='ClNhB'></ul>
                  <tfoot id='ClNhB'></tfoot>

                    <small id='ClNhB'></small><noframes id='ClNhB'>