Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C I’;我很难理解如何用LBS来填充位,以减少位的数量_C_Bit Manipulation - Fatal编程技术网

C I’;我很难理解如何用LBS来填充位,以减少位的数量

C I’;我很难理解如何用LBS来填充位,以减少位的数量,c,bit-manipulation,C,Bit Manipulation,将上述消息转换为独立的8位字节,我们得到: 000011100 00011100 00110100 00111000 00110100 00100 000100100 00011000 00011000 00011000 00011000 00011000 0001011 000011100 000011100 000010010 00011101 由于每个字符只使用六位,因此可以删除两个最高有效位(MSB),结果如下: 001100 011100 110100 111000 110100 10

将上述消息转换为独立的8位字节,我们得到:

000011100 00011100 00110100 00111000 00110100 00100 000100100 00011000 00011000 00011000 00011000 00011000 0001011 000011100 000011100 000010010 00011101

由于每个字符只使用六位,因此可以删除两个最高有效位(MSB),结果如下:

001100 011100 110100 111000 110100 100100 010010 011100 100100 010000 011011011001110 001010 011101

现在是棘手的部分。。。我们将把这些位打包成8位字节。这些字节将是压缩数组的一部分。为此,我们至少从第一个字符的最低有效位(LSB)开始。在这种情况下,它是位模式为001100的字母C。此模式的LSB是最后的0(粗体)-001100。该位将成为压缩数组中第一个元素的lsb。我们一点一点地继续,直到将整个字符放入压缩数组的第一个元素。请注意,将有两个位尚未初始化:
--0 0 1 1 0好的,这里有一些难看的代码来做你想做的事情。你可以做很多改进。为了更好地理解这个问题,我读过的最好的东西是Base64是如何工作的。这基本上只是教你一些非常重要的基本概念

正如评论所说,你的转换毫无意义。我只是把你的字符串当作基本ASCII码,因为我不明白你的意思

我手动验证了一半的结果,它们可以在这里看到

此处找到的撤销代码归功于sth()

#包括
无符号字符反转(字符b){

b=(b&0xF0)>>4 |(b&0x0F)>2 |(b&0x33)>1 |(b&0x55)好的,下面是一些难看的代码来做你想做的。你可以做很多改进。为了更好地理解这个问题,我读过的最好的东西是Base64是如何工作的。这基本上只是教你一些非常重要的Base64概念

正如评论所说,你的转换毫无意义。我只是把你的字符串当作基本ASCII码,因为我不明白你的意思

我手动验证了一半的结果,它们可以在这里看到

此处找到的撤销代码归功于sth()

#包括
无符号字符反转(字符b){

b=(b&0xF0)>>4 |(b&0x0F)>2 |(b&0x33)>1 |(b&0x55)这是一个不错的问题,但它与
C
没有明确的关系。
C
标记表示您打算在某些实现中使用该语言,或者您已经尝试了一些东西。如果是这样,请发布您的尝试,然后指出问题所在。()
char
C
如何转换为值
0x0C
?我很难看到您如何将字符串转换为用于表示它们的第一个序列二进制序列。它肯定不是ASCII编码。(即ASCII
CS262
转换为十六进制
43 53 32 36 32
,而不是
0C 1C 34 34
)这是一个不错的问题,但它与
C
没有明确的关系。
C
标记表示您打算在某些实现中使用该语言,或者您已经尝试了一些东西。如果是这样,请发布您的尝试,然后指出问题所在。()
char
C
如何转换为值
0x0C
?我很难看到您如何将字符串转换为用于表示它们的第一个序列二进制序列。它肯定不是ASCII编码。(即ASCII
CS262
转换为十六进制
43 53 32 36 32
,而不是
0C 1C 34 34
)请注意,我知道这段代码有很多限制。我不想花时间优化和扩展它。我只是想给出一个概念证明。请注意,我知道这段代码有很多限制。我不想花时间优化和扩展它。我只是想给出一个概念证明。
0C 1C 34 38 34 24 12 1C 24 10 1B 0E 0A 1D 25
 C   S   2   6   2        I    S        G   R   E   A   T   !
#include <stdio.h>

unsigned char reverse( char b) {
    b = (b & 0xF0) >> 4 | (b & 0x0F) << 4;
    b = (b & 0xCC) >> 2 | (b & 0x33) << 2;
    b = (b & 0xAA) >> 1 | (b & 0x55) << 1;
    return b;
}

int main()
{
unsigned char input[16] =  "CS262 IS GREAT!";
unsigned char reverseInput[16] =  {0};
unsigned char output[16] = {0};

printf("%s is the input\n\n", input);

for(int i=0; i<15;i++)
{
    printf("%X ",input[i]);
}

for(int i=0; i<15;i++)
{
    reverseInput[i] = reverse(input[i]);
}

printf("\n");

for(int i=0; i<15;i++)
{
    printf("%X ",reverseInput[i]);
}
 printf("\n");
unsigned int place = {0};

for(int i=0;i<4;i++)
{

    place = (reverseInput[i*4] & 0x3F) << 26 | (reverseInput[i*4+1] & 0x3F) << 20  | (reverseInput[i*4+2] & 0x3F) << 14 | (reverseInput[i*4+3] & 0x3F) << 8;

    printf("%08X ",place);
    output[(i*3)] = place >> 24;
    output[(i*3)+1] = place >> 16;
    output[(i*3)+2] = place >> 8;
}

printf("\n\nPacked Array: ");
for(int i=0; i<15;i++)
{
    printf("%X ",output[i]);
}


return 0;