我有一个像这样的字节数组:
lzo_bytep out; // my byte array
size_t uncompressedImageSize = 921600;
out = (lzo_bytep) malloc((uncompressedImageSize +
uncompressedImageSize / 16 + 64 + 3));
wrkmem = (lzo_voidp) malloc(LZO1X_1_MEM_COMPRESS);
// Now the byte array has 802270 bytes
r = lzo1x_1_compress(imageData, uncompressedImageSize,
out, &out_len, wrkmem);
Run Code Online (Sandbox Code Playgroud)
如何将它分成65,535字节以下的较小部分(字节数组是我想通过UDP发送的一个大图像,其上限为65,535字节)然后将这些小块连接回连续数组?
Bil*_*eal 42
这样做的问题是UDP数据包可以到达或订购,或被丢弃.为此使用TCP; 这就是它的用途.
Joe*_*sky 13
您不必"拆分"数组.你只需要指出它的不同部分.
假设您使用的是典型的UDP write()函数,则需要多个参数.其中一个是指向缓冲区的指针,另一个是长度.
如果要获取前65535个字节,则缓冲区为at wrkmem,长度为65535.
对于第二个65535字节,缓冲区为at wrkmem + 65535,长度为65535.
第三个65535字节,缓冲区为,wrkmem + 2 * 65535长度为65535.
得到它?
(也就是说,其他海报是正确的.你应该使用TCP).
另一方面,当你想重新加入数组时,你必须为整个数据分配足够的内存,然后使用像memcpy()这样的复制函数将到达的块复制到正确的位置.请记住,UDP可能无法按顺序传送碎片,并且可能无法提供所有碎片.