字节流


概述

演示字节流的基本用法,以及实现crc8校验和bcd编码的算法。


代码


var a = Bytes.create(10);
print(a, typeof(a), a.length);
a.sets("abcd");
a.sets("efgh", 6);
print(a.hex());
print(a.gets(2));
print(a[2],a.geti(2));

var b = a.sub();
b.seti(2, 1, "1b");
b.seti(1000, 2, "2b");
b.seti(1000, 4, "2l");
b.seti(10000, 6, "4b");
print(b.hex(), b.hex(true));
print(b.geti(2, "2b"));
print(b.sub(2, 4).hex());

var c = Bytes.create(4);
c.copy(a);
print(c.hex());

function crc8(data)
{
    var res = 0;
    for(var i = 0; i < data.length; i++)
    {
        res = (res ^ data[i]) & 0xFF;
        for(var j = 0; j < 8; j++)
        {
            if(res & 0x80) res = (res << 1) ^ 0xE5;
            else res <<= 1;
        }
    }
    return res & 0xFF;
}
var test = Bytes.create("B32725106500C05523000000002011000147171800", "hex");
print(Coder.num(crc8(test), "%02X"));

function bcd(n)
{
    var d = Bytes.create(5);
    d.seti(((n * 100) % 10) << 4 | ((n * 1000) % 10), 0);
    d.seti((n % 10) << 4 | ((n * 100) % 10), 1);
    d.seti(((n / 100) % 10) << 4 | ((n / 10) % 10), 2);
    d.seti(((n / 10000) % 10) << 4 | ((n / 1000) % 10), 3);
    d.seti((n > 0 ? 0 : 0xF) << 4 | ((n / 100000) % 10), 4);
    return d;
}

print(bcd(49.098).hex());