将HEX ASCII解析为数字?

Pau*_*aul 12 javascript parsing hex ascii

我有一个H/W设备,通常使用串行端口作为接口,发送和接收二进制消息到PC UI程序.我添加了一个以太网端口和小型TCP/IP堆栈,其中包含一个小型Web服务器,我想用它来用Web浏览器UI替换串口UI.

消息主要是请求/响应类,但对于某些网页,我可能需要Tx/Rx两条或更多消息来获取页面所需的所有信息.我将使用AJAX XMLHttpRequest()发送消息并获取页面的响应.

H/W设备具有有限的资源(CPU和RAM),所以为了保持简单,我想制作一个小的CGI接口,接收传出消息并将它们编码为HEX ASCII(即两个HEX ASCII字符/字节)到发送到浏览器,该浏览器将使用一些java脚本将消息分离到字段中并将它们转换为数字变量并将其显示给用户.对于从浏览器发送到H/W设备的消息也是如此.

消息包含字段类型,有符号和无符号字节,短路,长整数,浮点数的混合,并且在消息中主要以小端字节顺序进行复杂化.

我可以处理H/W结束代码,但我正在努力学习java脚本,并且可以使用函数帮助在浏览器端翻译HEX ASCII < - >数字.

有任何想法吗?一些示例代码在哪里?

谢谢,保罗

Bri*_*ell 34

听起来像你想要的parseInt.它需要一个字符串和一个可选的基数(应始终提供),并将该数字解析为该基数中的整数(如果没有提供,则根据数字的格式解析基数,这就是为什么你应该总是提供一个;人们惊讶地发现parseInt("010")回报8).

> parseInt("ab", 16)
171
Run Code Online (Sandbox Code Playgroud)

要转换回十六进制,您可以使用toString:

> var num = 16
> num.toString(16)
"10"
Run Code Online (Sandbox Code Playgroud)

请注意,如果只出现一个字符,则必须自己填写两个字符:

> num = 5
> num.toString(16)
"5"
Run Code Online (Sandbox Code Playgroud)

我很无聊,所以我写了一些函数来为你做两个方向的转换:

function parseHexString(str) { 
    var result = [];
    // Ignore any trailing single digit; I don't know what your needs
    // are for this case, so you may want to throw an error or convert
    // the lone digit depending on your needs.
    while (str.length >= 2) { 
        result.push(parseInt(str.substring(0, 2), 16));
        str = str.substring(2, str.length);
    }

    return result;
}

function createHexString(arr) {
    var result = "";
    for (i in arr) {
        var str = arr[i].toString(16);
        // Pad to two digits, truncate to last two if too long.  Again,
        // I'm not sure what your needs are for the case, you may want
        // to handle errors in some other way.
        str = str.length == 0 ? "00" :
              str.length == 1 ? "0" + str : 
              str.length == 2 ? str :
              str.substring(str.length-2, str.length);
        result += str;
    }

    return result;
}
Run Code Online (Sandbox Code Playgroud)

可以使用如下:

> parseHexString("abcd100001")
[171, 205, 16, 0, 1]
> createHexString([0, 1, 2, 10, 20, 100, 200, 255, 1000, 2000])
"0001020a1464c8ffe8d0"
> parseHexString(createHexString([0, 1, 2, 10, 20, 100, 200, 255, 1000, 2000]))
[0, 1, 2, 10, 20, 100, 200, 255, 232, 208]
Run Code Online (Sandbox Code Playgroud)


J.J*_*.J. 7

你正在寻找这个parseInt()功能:

x = "0xff";
y = parseInt(x, 16);
alert(y);   //255
Run Code Online (Sandbox Code Playgroud)