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

C++ equivalent of 'pack' in Perl

本文关键字:pack 中的 相当于 Perl C++      更新时间:2023-10-16

我如何编写c++代码来完成Perl中的pack -N选项?

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

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

我发现它与htonl有关,但htonl(时间戳)仍然没有给出二进制形式。

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

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

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

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

它占用4个字节,形成一个32位整型,如下所示:

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;
}