c语言里十进制下2的64次方,假设24位输入为101010111100000101100110,如何用C语言程序将其变成64进制编码?...

3级

2008-06-14 回答

下面说一下我的看法, 还请大家指正.

64进制下, 也就是 十进制的0-63 在64进制下 占一位.

64进制每个位对应的应该就是 二进制的 6bit, 我们知道, 16进制下,每一位 对应二进制的4bit.

也就是说,只要找到6个 二进制位, 就可以换算成一个 64进制的 位.

上面是应该注意的第一点。 64=2^6 (2的6次方)

24bit的输入,我们可以存贮在一个 32bit的 unsigned long 数据类型下,

具体如下,

int temp = 0;

int Bit_64[4] = 0; /*24 bit 对应 4 位 64进制的数*/

int uReceiveInputBit= 0; (存储收到的每一个bit)

int uShiftNum = 23; (需要和 uCurrentbit一起起作用)

int uCurrentbit = 0; (对应scanf得到的bit 从左到右 是第几位);

unsigned long ulStoreAllBit = 0;

循环使用scanf 获得每一个bit的输入,

/*保证, 如果没有输入就 退出循环*/

while ( scanf("%d", &uReceiveInputBit) )

{

/*假设从第一个bit开始,*/

/*因为ulStoreAllBit 初始化为0, 故如果收到的bit为0, 就不去处理, 只处理输入bit为1的*/

if (1 == uReceiveInputBit)

{

/*最早收到的bit, 一定是占据高位的, 对应权值高*/

ulStoreAllBit |= (0x1 << (uShiftNum-uCurrentbit) );

}

/*进入下一bit的处理*/

uCurrentbit ++;

}

当上面的代码处理完后, 意味着 用户输入的 24bit ,已经都在 ulStoreAllBit 里 用 bit 占据的形式存储下来了,

假设输入为 101010111100000101100110 的 话,

ulStoreAllBit = 00000000 101010111100000101100110(B);

uCurrentbit = uShiftNum;

while (uCurrentbit >=0)

{

temp = ulStoreAllBit & (0x1 << uCurrentbit);

if (1 == temp)

{

/*最高6bit, 存储在 Bit_64[0]中, 成为4位64进制数中的最高位*/

if ( uCurrentbit >= 18 )

{

Bit_64[0] += (2的 uCurrentbit - 18 次方)

}

else

if ( uCurrentbit >= 12 )

{

Bit_64[1] += (2的 uCurrentbit - 12 次方)

}

else

if ( uCurrentbit >= 6 )

{

Bit_64[2] += (2的 uCurrentbit - 6 次方)

}

else

if ( uCurrentbit >= 0 )

{

Bit_64[3] += (2的 uCurrentbit - 0 次方)

}

}

uCurrentbit--;

}

这样,

这个24bit的二进制数 换算成 64进制数 就是 (Bit_64[0])(Bit_64[1])(Bit_64[2])(Bit_64[3])

当然,这之中存在和16进制同样的,a,b,c,d,e,f 的问题, 不过这只是个标记, 这个64进制数的位和大小是不会错的了.

当前的这个例子中,

Bit_64[0]应该= 42; Bit_64[1]应该= 60; Bit_64[2]应该= 5; Bit_64[3]应该= 38;

这里只有一个关键点, 就是64进制下, 每一位 对应 二进制下, 6bit.

我的这个想法,只是抛砖引玉, 希望出现更好的方法, 希望对你有帮助.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值