能力值:
( LV2,RANK:10 )
|
-
-
2 楼
动态的那就放指针呗
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
求解... ...
现在就是不想很麻烦的一个个去存指针 因为数据量非常大.
而且存指针的话 那指针是4字节 或者 用一个 BYTE 来指向开始(使用时直接 char *)
但那样做就得一个个去解悉了,非常麻烦 不然怎么保存最后一个结构成员的位置呢? 如果copy的话 后面的数据就无法对齐
|
能力值:
( LV9,RANK:140 )
|
-
-
4 楼
“05 31 31 32 33 33 完全是动态”把这个定义为一个结构体a
typedef struct _xx
{
BYTE arr1[3];//开头的3字节
结构体a
BYTE arr2[3];//尾部3字节
}
对于结构体的操作你可以很方便的使用指针来操作,一点不麻烦...
一般不用memcpy,因为结构体加载到内存可能考虑内存对齐的问题memcpy操作可能不正确得到数据.
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
[QUOTE=小覃;1059374]“05 31 31 32 33 33 完全是动态”把这个定义为一个结构体a
typedef struct _xx
{
BYTE arr1[3];//开头的3字节
结构体a
BYTE arr2[3];//尾部3字节
}
对于结构体的操作你可以很...[/QUOTE]
typedef struct _a
{
BYTE len;
char *p
}
??? 这样子?
|
能力值:
( LV9,RANK:140 )
|
-
-
6 楼
是的 。
|
能力值:
( LV3,RANK:20 )
|
-
-
7 楼
LZ最近很活跃啊:
|
能力值:
( LV9,RANK:140 )
|
-
-
8 楼
大四了没课,工作也没有就闲了..
|
能力值:
( LV5,RANK:70 )
|
-
-
9 楼
这么晚了都不断电?
|
能力值:
( LV5,RANK:70 )
|
-
-
10 楼
我以为定义为结构体不可行,还是用指针
|
能力值:
( LV9,RANK:140 )
|
-
-
11 楼
今天是周末哦!
|
能力值:
( LV5,RANK:70 )
|
-
-
12 楼
我们周末只到11点45,平常10点45。你那动态结构体不可能的吧,听都没听说过。
|
能力值:
( LV9,RANK:140 )
|
-
-
13 楼
都可以的..
|
能力值:
( LV9,RANK:140 )
|
-
-
14 楼
指针也可以,结构也没问题,看你的习惯,
最终还是要看你怎么读这块数据了,效果是一样的~
你可以参看一下Pe文件的NT头
|
能力值:
( LV5,RANK:70 )
|
-
-
15 楼
以前想都没敢想过,果然太死板了,示例有吗,没见过的东西不知道什么样,不知道去哪找。
|
能力值:
(RANK:400 )
|
-
-
16 楼
中间填充区域放个 *p,然后自己申请内存。
ps:微软的很多结构体都是这样的。
|
能力值:
( LV2,RANK:10 )
|
-
-
17 楼
std::string搞起
|
能力值:
( LV5,RANK:70 )
|
-
-
18 楼
终于想到了
struct{
BYTE head[3];
BYTE length;
}PacketHead;
struct{
BYTE head[3];
BYTE length;
BYTE data[1];
}*pPacket;
先读4字节到PacketHead里,用它的length+3+1+3申请内存赋到pPacket,再将PacketHead复制到pPacket开头,最后读取剩余的部分。
|
能力值:
( LV5,RANK:70 )
|
-
-
19 楼
更好一点的方案,就是一次性分一个较大的内存,防止内存碎片,这时就不用先读取到PacketHead了,可读到pPacket但仍需先读4字节,根据length判断是否会溢出,是则头部保存到PacketHead,释放并重新分配更大的内存。
|
|
|