<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 检查方法中的问题时需要帮助

      Need help in correcting issues in CRC-ITU check method written in Javascript (node.js)(在纠正用 Javascript (node.js) 编写的 CRC-ITU 检查方法中的问题时需要帮助)
    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 检查方法中的问题时需要帮助的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

                相关文档推荐

                在开发JS过程中,会经常遇到两个小数相运算的情况,但是运算结果却与预期不同,调试一下发现计算结果竟然有那么长一串尾巴。如下图所示: 产生原因: JavaScript对小数运算会先转成二进制,运算完毕再转回十进制,过程中会有丢失,不过不是所有的小数间运算会
                问题描述: 在javascript中引用js代码,然后导致反斜杠丢失,发现字符串中的所有\信息丢失。比如在js中引用input type=text onkeyup=value=value.replace(/[^\d]/g,) ,结果导致正则表达式中的\丢失。 问题原因: 该字符串含有\,javascript对字符串进行了转
                Rails/Javascript: How to inject rails variables into (very) simple javascript(Rails/Javascript:如何将 rails 变量注入(非常)简单的 javascript)
                CoffeeScript always returns in anonymous function(CoffeeScript 总是以匿名函数返回)
                Ordinals in words javascript(javascript中的序数)
                getFullYear returns year before on first day of year(getFullYear 在一年的第一天返回前一年)
              • <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>

                        <tbody id='ClNhB'></tbody>

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