c - 剥离 Buffer 数据的指针数组 (Scatter Gather List) 的前 10 个字节和后 10 个字节
问题描述
我需要执行压缩操作,需要先剥离和最后 10 个字节的用户数据,然后对剩余的用户缓冲区数据进行编程以进行压缩。Array/SGL 可以有多个缓冲区和不同的数据长度。现在可以安全地假设总体用户数据大小大于 1000 字节。
如果有单个用户缓冲区数组,我能够获得正确的逻辑和功能。但是,对于多个缓冲区数组,我们可能必须在编程压缩之前迭代缓冲区并修改data_addr 和 data_len以及整体num_src值,以便剥离前 10 个字节和后 10 个字节,这就是我卡住的地方。非常感谢任何指向博客/代码帮助的建议/指针。
// Buffer data structure
typedef struct
{
void *data_addr;
int data_len;
}T_BUF_DATA;
//data_len is the length of the data pointed by data_addr;
*int strip_header_in_user_data ( T_BUF_DATA *src, int num_src )
{
// Strip the first 10 byes
// single source data
if ( num_src == 1 )
{
src[0].buf_addr = src[0].buf_addr +10; // increase the offset by 10
src[0].buf_len = src[0].buf_len -10 - 10 ; // first 10 and last 10 bytes are subtracted
program_compression ( src, num_src );
}
// Multiple source buffers
for ( int i = 0; i < num_src; i++ )
{
// Any suggestions here
program_compression ( ??, ?? );
}
}*
void program_compression ( T_BUF_DATA *src, int num_src )
{
}
解决方案
如果我理解问题(bytes
要剥离的字节):
typedef struct
{
void *data_addr;
size_t data_len;
}T_BUF_DATA;
void strip(T_BUF_DATA *buff, size_t bytes)
{
unsigned char *data = buff -> data_addr;
memmove(buff -> data_addr, data + bytes, buff -> data_len - 2 * bytes);
buff -> data_len -= 2 * bytes;
}
或去除大小为 nsize 的 n 个元素
void strip(T_BUF_DATA *buff, size_t nelem, size_t nsize)
{
unsigned char *data = buff -> data_addr;
memmove(buff -> data_addr, data + nelem * nsize, buff -> data_len * nsize - 2 * nelem * nsize);
buff -> data_len -= 2 * nelem;
}
编辑
如果您的问题是如何在这些结构的数组上使用它:
void stripWholeArray(T_BUF_DATA *buff, size_t nbuffers, size_t nbytes)
{
while(nbuffers--)
{
strip(buff++, nbytes);
}
}
推荐阅读
- python - 如何设置python扩展开发环境?
- google-cloud-platform - 用于插入特定 BigQuery 数据集的 IAM 自定义角色
- django - Django、CORS、CSRF——我做得对吗?
- mongodb - 查找数组 mongodb 中没有关键字的所有文档
- android - React-Native-Video 在 Android 中禁用 TouchableOpacity
- c# - “移动到另一个文件”后错误的大括号布局
- android - 构建失败:后向分支 70 上存在未初始化的对象
- java - 使用 Java 11 启动弹性搜索 5.0.1 时出现 AccessControlException
- camunda - Camunda 不包含任何历史记录
- aggregation - 分类变量的聚合