douwen7905 2017-05-19 21:52
浏览 135

从php中定义长度的十六进制字符串中获取参数

How to get the 7 variables from this string "c0dbdc000081aa02000000000001c0", defining lengths for each one, some times it comes with voids in Zeros.

Definition to get the data from string:

0xc0->[SLIP Start char:C0]
0xdb,0xdc[C0]->Flag|Version:c,0
0x00->Reserved:0
0x00,0x81->Packet length:129
0xaa,0x02->Packet command:AA02[hex]
0x00,0x00->CRC check:0[hex]
0x00,0x00,0x00,0x01->Serial number:1
0xc0->[SLIP End char:C0]

Example: this are 3 strings with the same data, but 2 of them are shorter in the "Packet length" value, they dont have the 2 leading zeros. (added some spacing to show the missing zeros)

"c0000000  9aaa02000000000029c0"
"c0000000  85aa0200000000000ac0"
"c0dbdc000081aa02000000000001c0"

The code i have works with the last one, but the first ones will get messed up because of missing Zeros. Any ideas on how to manage this?

$inputSample = "C0DBDC000081AA02000000000001C0";
$header = array(
    "start" => 2,
    "flagVersion" => 4,
    "reserved" => 2,
    "packetLenght" => 4,
    "packetCommand" => 4,
    "CRCcheck" => 4,
    "serialNumber" => 8,
    "end" => 2
);
print_r(ParseIrregularString($inputSample, $header));

function ParseIrregularString($string, $lengths) {
    $parts = array();

    foreach ($lengths as $StringKey => $position) {
        $parts[$StringKey] = substr($string, 0, $position);
        $string = substr($string, $position);
    }

    return $parts;
}

Good Result "C0DBDC000081AA02000000000001C0"

Array
(
    [start] => C0
    [flagVersion] => DBDC
    [reserved] => 00
    [packetLenght] => 0081
    [packetCommand] => AA02
    [CRCcheck] => 0000
    [serialNumber] => 00000001,
    [end] => C0
)

Bad Result "c00000009aaa02000000000029c0"

Array
(
    [start] => c0
    [flagVersion] => 0000
    [reserved] => 00
    [packetLenght] => 9aaa
    [packetCommand] => 0200
    [CRCcheck] => 0000
    [serialNumber] => 000029c0
    [end] => 
)
  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 安卓adb backup备份应用数据失败
    • ¥15 eclipse运行项目时遇到的问题
    • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
    • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
    • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
    • ¥50 成都蓉城足球俱乐部小程序抢票
    • ¥15 yolov7训练自己的数据集
    • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
    • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
    • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)