gpt4 book ai didi

c - 将数据移入和移出文件 X 位的最佳方法是什么?

转载 作者:行者123 更新时间:2023-11-30 17:57:57 26 4
gpt4 key购买 nike

我有一个数据集,由掩码文件和数据文件组成。掩码文件告诉解码器对于数据文件的当前偏移量,每个字段是否存在 8 位,或者 4 位。我需要根据掩码将数据移出,并写入解码后的文件,每个字段全部 8 位。我正在尝试用 C 语言来实现这一点。

void shift_4bits_left(unsigned char* array, unsigned short size)
{
int i;
unsigned char shifted = 0x00;
unsigned char overflow = (0xF0 & array[0]) >> 4;

for (i = (size - 1); i >= 0; i--)
{
shifted = (array[i] << 4) | overflow;
overflow = (0xF0 & array[i]) >> 4;
array[i] = shifted;
}
}

在函数中:

while(len>count){
//count=0;
if(bit==0)yy=fread(blockchar,1,len,fp1);
if(bit==0)memcpy(blockchar2,blockchar,len);
count+=yy;
memset(outputbuf,0,64);
for(x=0;x<len;x++){
count2=0;
//count2=1;

if(sometests(blockchar[x])==1)
{
shift_4bits_left(&blockchar[x],(yy-(bittest/2))+1);
count2=1;
total++;
if(total%2==0)len--;
}

//set bit for current position in mask file's buffer
if((x)%8 == 0)outputbuf[x]+=(count2<<7);
if((x)%8 == 1)outputbuf[x]+=(count2<<6);
if((x)%8 == 2)outputbuf[x]+=(count2<<5);
if((x)%8 == 3)outputbuf[x]+=(count2<<4);
if((x)%8 == 4)outputbuf[x]+=(count2<<3);
if((x)%8 == 5)outputbuf[x]+=(count2<<2);
if((x)%8 == 6)outputbuf[x]+=(count2<<1);
if((x)%8 == 7)outputbuf[x]+=count2;
}

问题是处理大型数据集时速度非常慢,我更愿意对文件进行迭代,而不将文件存储在数组中。

最佳答案

我通过一次查看 256 个字节并且在不移位时使用 memcpy 解决了这个问题。谢谢大家的帮助。

关于c - 将数据移入和移出文件 X 位的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12568798/

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