gpt4 book ai didi

c - 从比特流中提取特定位,给定一个指向比特流开头的空指针

转载 作者:行者123 更新时间:2023-11-30 21:28:36 25 4
gpt4 key购买 nike

我有一个很长的比特流,并且有一个指向它开头的空指针。从这个比特流中,我想从位位置“m”中提取“n”位。

例如,我想从第57位位置提取75位。如何做到这一点?

我尝试通过将 void 指针类型转换为 char 指针,然后将其递增到 m/8 来做到这一点。从这里开始,我就不知道如何从这里提取了。

如何在 C 中处理此类比特流?

请原谅我,因为我没有在这里编写任何有关方法的代码,因为我不知道如何继续,而且没有比这里更好的地方来解决这个问题。

最佳答案

这是一个简单且未经优化的解决方案,用于从字节数组中提取从 EXTRACT_OFFSET(此处 = 57)开始的 EXTRACT_COUNT 位(此处 = 75)。

当请求的 bitIndex 指向 bitArray[] 之外时,getBit() 返回 (-1),否则返回该值提取的位。

#include <stdio.h>

int getBit(unsigned char bitArray[], int lenArray,int bitIndex)
{
int iBytePos = bitIndex >> 3;
int iByteBit = bitIndex % 8;
unsigned char uByteVal;

if (iBytePos > lenArray) {
return (-1);
}
uByteVal = bitArray[ iBytePos ];
if (iByteBit==0) printf("."); // to mark the 8bits border
if ((uByteVal & (0x80 >> iByteBit)) != 0) {
return (1);
}
return (0);
}

#define ARRAY_SIZE (18)
#define EXTRACT_OFFSET (57)
#define EXTRACT_COUNT (75)

int main()
{
unsigned char tabByte[ARRAY_SIZE] = {
0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xA5, 0xFF,
0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x00 };

int iVal,iCount;

iCount=0;
for(int i=0;i<EXTRACT_COUNT;i++)
{
iVal = getBit(tabByte,ARRAY_SIZE,i+EXTRACT_OFFSET);
if (iVal >= 0) {
iCount++;
printf("%1d",iVal);
}
}
printf("\niCount=%d\n",iCount);
return (0);
}

关于c - 从比特流中提取特定位,给定一个指向比特流开头的空指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40394369/

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