如何编写符合pack -N
选项在Perl中执行的C ++代码?
我想将整数变量转换为某种二进制形式,以便它上面的unpack -N选项返回整数变量。
我的整数变量名是时间戳。
我发现它与htonl有关,但仍然是htonl(timestamp)不提供二进制形式。
答案 0 :(得分:4)
我写了一个库libpack
,类似于Perl的pack
函数。它是一个C库,因此它也可以从C ++中使用:
FILE *f;
fpack(f, "u32> u32>", value_a, value_b);
A u32 >
指定大端格式的无符号32位整数;即相当于Perl的N
格式到pack()
。
答案 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;
}