Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将字符串解释为C+中的压缩二进制数据+; 我有疑问把字符串解释成C++中的打包二进制数据。在python中,我可以使用struct模块。C++中有没有一个模块或方法将字符串解释为打包的二进制数据而不包含Python?< P>一个C++中的字符串,有一个方法叫做CySTR().< /P>_C++ - Fatal编程技术网

将字符串解释为C+中的压缩二进制数据+; 我有疑问把字符串解释成C++中的打包二进制数据。在python中,我可以使用struct模块。C++中有没有一个模块或方法将字符串解释为打包的二进制数据而不包含Python?< P>一个C++中的字符串,有一个方法叫做CySTR().< /P>

将字符串解释为C+中的压缩二进制数据+; 我有疑问把字符串解释成C++中的打包二进制数据。在python中,我可以使用struct模块。C++中有没有一个模块或方法将字符串解释为打包的二进制数据而不包含Python?< P>一个C++中的字符串,有一个方法叫做CySTR().< /P>,c++,C++,c_str以字符数组的形式返回字符串中的相关二进制数据。您可以将这些字符转换为您想要的任何字符,并将其作为数字数组读取。基本上,您不需要解释任何内容。在C++中,字符串是 压缩二进制数据;你可以把它们解释为文本,但你不是 必须这样做。请注意,在 C++,是代码> char < /C>,它可以是签名的(范围 [-128127 ] < /COD> 我听说过的机器)或未签名(通常[0255],但我知道 机器所在位置[0511]) 要将原始数据以字符串形式传递给C程序,请使用 std::string::

c_str以字符数组的形式返回字符串中的相关二进制数据。您可以将这些字符转换为您想要的任何字符,并将其作为数字数组读取。

基本上,您不需要解释任何内容。在C++中,字符串是 压缩二进制数据;你可以把它们解释为文本,但你不是 必须这样做。请注意,在 C++,是代码> char < /C>,它可以是签名的(范围<代码> [-128127 ] < /COD> 我听说过的机器)或未签名(通常
[0255]
,但我知道 机器所在位置
[0511]

要将原始数据以字符串形式传递给C程序,请使用
std::string::data()
std::string::size()
。否则,你可以 使用迭代器或索引访问它,就像使用
<代码> STD::向量< /代码>(它可以更好地表达意图).

正如已经提到的,最好考虑这是一个字节数组(字符或无符号字符),可能保留在一个STD::vector中,而不是一个字符串中。字符串以null结尾,所以如果二进制数据的一个字节的值为零,会发生什么情况

可以将数组中的指针强制转换为指向结构的指针,也可以将数据复制到结构上:

#include <memory>

#pragma pack ( push )
#pragma pack( 1 );

struct myData
{
    int data1;
    int data2;
    // and whatever
};

#pragma pack ( pop ) 


char* dataStream = GetTheStreamSomehow();

    //cast the whole array
myData* ptr = reinterpret_cast<myData*>( dataStream );
    //cast from a known position within the array
myData* ptr2 = reinterpret_cast<myData*>( &(dataStream[index]) );

    //copy the array into a struct
myData data;
memcpy( &data, dataStream, sizeof(myData) );
#包括
#pragma包(推送)
#布拉格语包(1);
结构myData
{
int data1;
int数据2;
//不管怎样
};
#布拉格语包(流行语)
char*dataStream=getthestream();
//投出整个阵型
myData*ptr=重新解释(数据流);
//从阵列中的已知位置强制转换
myData*ptr2=重新解释(数据流[索引]);
//将数组复制到结构中
myData数据;
memcpy(&data,dataStream,sizeof(myData));

如果要将数据流放在向量中,则[]运算符仍然有效。pragma-pack声明确保结构是单字节对齐的-研究这一点留给读者作为练习。:-)

尽管它在python中可能更接近,但也可能最接近您想要实现的目标


否则你可能想用手来做。让读写器类将原语/类转换为压缩二进制格式并不难。我会通过移动字节来避免主机端性问题。

字符串是连续字符序列(基本上是字节)。您希望得到更多的压缩?因此,给定一个字节数组,您希望能够将该数组视为一个
结构
?在C++中,对于二进制数据,通常使用的是<代码>向量(而不是字符串)和未签名char < /C> >类型来表示字节(避免SIGNNITY问题)。因此,典型的“缓冲区”将是
std::vector
,而不是
std::string
。。。注意,在C++03中,字符串存储不需要是连续的。@MatthieuM。C++03不需要连续性,但返回值
std::string::data()
指向的C样式数组必须是连续的。C++11添加连续性要求的原因是对现有实践的认可——事实上没有不连续的实现(而且
&s[0]
不会产生与
s.data()
)相同的值。@JamesKanze:
数据
用于
向量
,所以我相信你说的是
c_str
c_str
的问题是它是
char const*
,有时您希望修改字符(
到\u upper
?)。您可以,尽管这通常介于实现定义的行为和未定义的行为之间。@OliCharlesworth转换的结果将由实现定义,因为普通字符是否有符号以及它包含多少位是由实现定义的。将
char
转换为足以包含值的整数类型(如果
char
是有符号的,则所有整数类型都是有符号的)以及将其转换为任何无符号整数类型或浮点类型都有很好的定义。Thx帮助您快速找到答案。为了澄清,我想用Python将我的应用程序覆盖到编辑EXE/DLL和RSC文件中,并且我在Python中有一些函数的问题,例如:BuffTnn MaP()。