gpt4 book ai didi

c++ - 将二进制数据 blob 解码为结构

转载 作者:行者123 更新时间:2023-11-28 08:05:29 25 4
gpt4 key购买 nike

我有一个 Visual Studio 2008 C++ 项目,我需要在其中将一个 6 字节数据数组解码为一个结构。

我的想法是做这样的事情:

#pragma pack( push, 1 )
struct Map
{
BYTE alpha : 8;
BYTE bravo : 8;
UINT charlie : 24;
BYTE delta : 8;
BYTE padding0 : 8; // ensure correct byte boundary
BYTE padding1 : 8;
};
#pragma pack( pop )
// sizeof( Map ) == 8 bytes

BYTE test_data[ 6 ] = { 0x07, // alpha
0x0B, // bravo
0x00, // charlie high byte
0x00, // charlie med byte
0x01, // charlie low byte
0x33 }; // delta
Map map = { };
memcpy( &map, test_data, sizeof( test_data ) );
ASSERT( map.alpha == 0x07 );
ASSERT( map.bravo == 0x0B );
ASSERT( map.charlie == 0x01 );
ASSERT( map.delta == 0x33 );

但是,charliedelta 中的数据永远不会正确。

有没有一种方法可以构造我的结构以使其正确,或者我是否坚持单独设置每个字段?

谢谢

最佳答案

以便携的方式做到这一点:

struct Map 
{
BYTE alpha;
BYTE bravo;
UINT charlie;
BYTE delta;

Map(const BYTE data[6])
: alpha(data[0])
, bravo(data[1])
, charlie((data[2] << 16) | (data[3] << 8) | data[4])
, delta(data[5])
{}
};

int main()
{
BYTE test_data[ 6 ] = { 0x07, // alpha
0x0B, // bravo
0x00, // charlie high byte
0x00, // charlie med byte
0x01, // charlie low byte
0x33 }; // delta
Map map(test_data);
ASSERT( map.alpha == 0x07 );
ASSERT( map.bravo == 0x0B );
ASSERT( map.charlie == 0x01 );
ASSERT( map.delta == 0x33 );
}

关于c++ - 将二进制数据 blob 解码为结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10387660/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com