填充字节到数字

时间:2018-05-06 00:29:09

标签: perl

我正在尝试在服务器和客户端之间分离TCP套接字消息。我尝试这样做的方法是通过以4个字节开始每个消息,其中包含一个描述消息大小的整数。问题是我不知道如何用额外的字节填充该整数,使其大小为4字节。我在窗户上。

此外,服务器是在节点中编写的,但我想我已经找到了那个方面。

以下是我的一些代码,如果它有帮助:

    $data = JSON->new->utf8->encode({test=>123});
    print $OUTPUT_SOCKET length(encode('UTF-8', $data)); # This needs to be 4 bytes
    print $OUTPUT_SOCKET $data

1 个答案:

答案 0 :(得分:1)

sprintf "%32d",  $length  # Padded with spaces
sprintf "%032d", $length  # Padded with zeroes

如果不需要是文本格式,请使用以下内容:

pack 'N',  $length   # 32-bit unsigned int (4 bytes) in BE byte order.
pack 'Q>', $length   # 64-bit unsigned int (8 bytes) in BE byte order.

如果采用这种方法,您可以将所有内容组合在一起:

print $SOCK pack 'N/a*', $encoder->encode($data);  # Or Q>/a*