我正在尝试在C语言中将一些数据从十六进制转换为Base64。我在网上找到了一个算法,但我真的很想知道它是如何工作的,而不仅仅是实现它并启动它。如果有人能解释一下以下内容的工作原理,我会非常感激。我一直在阅读关于移位运算符的文章,但似乎并没有像我想象的那样理解它们...它还没有完全适应我。
这段代码来自Wikibooks,不是我写的,我只是想理解位移操作以及它如何帮助我转换数据。
非常感谢您的帮助,我真的很感激。
来源:Base64
for (x = 0; x < dataLength; x += 3)
{
/* these three 8-bit (ASCII) characters become one 24-bit number */
n = data[x] << 16;
if((x+1) < dataLength)
n += data[x+1] << 8;
if((x+2) < dataLength)
n += data[x+2];
/* this 24-bit number gets separated into four 6-bit numbers */
n0 = (uint8_t)(n >> 18) & 63;
n1 = (uint8_t)(n >> 12) & 63;
n2 = (uint8_t)(n >> 6) & 63;
n3 = (uint8_t)n & 63;
这段代码来自Wikibooks,不是我写的,我只是想理解位移操作以及它如何帮助我转换数据。
非常感谢您的帮助,我真的很感激。
来源:Base64
>>
、<<
和&
的理解,然后再看看您是否还有疑问。 - user3458n >> 1
表示将 n 的最低二进制位舍弃,接下来的二进制位变成新的最低位,以此类推。例如,00011001 >> 1
的结果为00001100
。对于有符号整数类型,还有更多细节(符号位会被传递),但本质上是进行位移操作。通过位移和位掩码(&
运算符)的组合,可以从一个字中间取出一堆位,并将它们视为一个单独的数字。 - user3458