如果使用struct.pack(fmt,v1,v2,...)在python打包,如何在cpp中解压缩数字
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如果使用struct.pack(fmt,v1,v2,...)在python打包,如何在cpp中解压缩数字相关的知识,希望对你有一定的参考价值。
在python中,我使用struct
编码数字
struct.pack("<2q", 456, 123)
它回来了
'xc8x01x00x00x00x00x00x00{x00x00x00x00x00x00x00'
在cpp中,我如何将这样的字符串解码为整数元组?
答案
解压缩该字符串应该相当简单,您只需将字节复制到适当大小的整数:
#include <iostream>
#include <string>
#include <cstring>
int main()
{
std::string input = std::string("xc8x01x00x00x00x00x00x00{x00x00x00x00x00x00x00", 16);
for ( size_t i = 0; i < input.size() / 8; i++ )
{
int64_t value;
memcpy(&value, &input[i*8], 8);
std::cout << value << "
";
}
}
另一答案
q
很长,所以64位有符号整数。来自https://docs.python.org/3/library/struct.html:
Format C Type Python type Standard size
q long long integer 8
你可以读取这个缓冲区并复制到一个2长的数组(64位使用stdint.h
定义)
#include <iostream>
#include <strings.h>
#include <stdint.h>
int main()
{
// you're supposed to get that when reading the buffer from a file for instance:
const unsigned char buffer[] = {0xc8,0x01,0x00,0x00,0x00,0x00,0x00,0x00,'{',0x00,0x00,0x00,0x00,0x00,0x00,0x00};
int64_t array[2];
memcpy(array,buffer,sizeof(array));
std::cout << array[0] << "," << array[1] << '
';
}
打印:
456,123
我没有在这里处理字节序。只是假设他们是一样的。但是如果你想要它,只需使用类型的大小交换字节,你就可以了。
以上是关于如果使用struct.pack(fmt,v1,v2,...)在python打包,如何在cpp中解压缩数字的主要内容,如果未能解决你的问题,请参考以下文章