小编int*_*iha的帖子

如何解析在Perl中解压缩的空格分隔的STDIN十六进制字符串?

我有一个Java程序,以空格分隔的十六进制格式,通过网络接收16字节的原始数据包.由于我不想更改该代码,因此我将结果传递给Perl脚本,unpack从理论上讲,这可以简单地将其STDIN转换为可识别的变量.以下是我的Perl文件的输入行示例:

FF FF 09 7D 10  01  07  01 00  02 00  1D 00  00 00  00 00  06 00  07 00 
|--garbage-----|c--|c--|int---|int---|int---|int---|int---|int---|int---|

(c表示char/byte,int表示16位整数变量)

我最初想用来unpack干净地将每个输入行分成我需要的变量.但是,由于字符串中的空格分隔,我不知道如何处理它(我可以使用'A'作为模板,但我不妨使用split!)

有优雅的使用方式unpack()吗?我不是Perl的主人,但另一种方法是,正如我之前建议的那样,使用split然后手动将每个十六进制转换为一个字节,然后使用位操作和掩码来获得我想要的东西.任何其他建议(如果unpack没有保存一天)?

perl parsing unpack

6
推荐指数
1
解决办法
1233
查看次数

用Java访问的AC结构

我有一个C结构,通过一些中间网络发送,并通过Java代码通过串行链接接收.Java代码给了我一个字节数组,我现在想把它重新打包为原始结构.现在,如果接收代码在C中,这很简单.有没有简单的方法将java中的byte []重新打包为C结构.我在java方面的经验很少,但这似乎不是常见的问题,或者在我能找到的任何常见问题解答中都解决了.

仅供参考,C结构是

struct data {
     uint8_t        moteID;
    uint8_t     status; //block or not
    uint16_t   tc_1;
    uint16_t   tc_2;
    uint16_t   panelTemp;  //board temp
    uint16_t   epoch#;
    uint16_t   count;    //pkt seq since the start of epoch
    uint16_t   TEG_v;   
    int16_t   TEG_c;    
 }data;
Run Code Online (Sandbox Code Playgroud)

c java struct cross-platform

4
推荐指数
1
解决办法
4988
查看次数

如何在Perl中检查eof?

因此,在以下情况中,我有一些问题可以确定Perl的作用:

while(1){
$inputLine=<STDIN>

#parse $inputLine below
#BUT FIRST, I need to check if $inputLine = EOF

}
Run Code Online (Sandbox Code Playgroud)

在我得到明显的使用答案之前while(<>){},让我说有一个非常强大的理由,我必须做上述事情(基本上设置一个警报来中断阻止,我不希望代码混乱的例子).

有没有比较$inputLine == undef(因为我认为这是STDIN最后返回的).

谢谢.

perl eof

3
推荐指数
1
解决办法
2万
查看次数

标签 统计

perl ×2

c ×1

cross-platform ×1

eof ×1

java ×1

parsing ×1

struct ×1

unpack ×1