在Perl中C ++相当于'pack'

时间:2014-07-21 11:09:49

标签: c++ perl pack

如何编写符合pack -N选项在Perl中执行的C ++代码?

我想将整数变量转换为某种二进制形式,以便它上面的unpack -N选项返回整数变量。

我的整数变量名是时间戳。

我发现它与htonl有关,但仍然是htonl(timestamp)不提供二进制形式。

2 个答案:

答案 0 :(得分:4)

我写了一个库libpack,类似于Perl的pack函数。它是一个C库,因此它也可以从C ++中使用:

FILE *f;
fpack(f, "u32> u32>", value_a, value_b);

A u32 >指定大端格式的无符号32位整数;即相当于Perl的N格式到pack()

http://www.leonerd.org.uk/code/libpack/

答案 1 :(得分:1)

它需要4个字节并形成一个32位的int,如下所示:

uint32_t n;
n = buf[0] << 24
  | buf[1] << 16
  | buf[2] <<  8
  | buf[3] <<  0;

例如,

uint32_t n;
unsigned char buf[4];
size_t bytes_read = fread(buf, 1, 4, stream);
if (bytes_read < 4) {
   if (ferror(stream)) {
      // Error
      // ...
   }
   else if (feof(stream)) {
      // Premature EOF
      // ...
   }
}
else {
   n = buf[0] << 24
     | buf[1] << 16
     | buf[2] <<  8
     | buf[3] <<  0;
}