C - 将三个 8 位字符操作为 24 位 block ,再转换为四个 6 位 block

标签 c bit-manipulation bit

给定三个字符输入 a、b、c,如何将这三个 8 位值转换为一个 24 位值。接下来,如何将该 24 位值转换为四个单独的 6 位值。

例如:

a = ascii 'A' = 0x41 = 0100 0001

b = ascii 'B' = 0x42 = 0100 0010

c = ascii 'C' = 0x43 = 0100 0011

allTogether = 010000010100001001000011

sixBit1 = 010000

sixBit2 = 010100

sixBit3 = 001001

sixBit4 = 000011

现在为了实现,我正在考虑将 allTogether 设为 int,因为它可以容纳 32 位,然后将包含 'A'、'B' 和 'C' 的字符左移到 int 上,但我不这样做确定要左移多少。至于获取四个六位值,我不知道该怎么做,也不知道应该使用什么数据类型。如有任何帮助,我们将不胜感激!

最佳答案

实现类似于以下内容

unsigned int a = 'A'; // = 0x41 = 0100 0001

unsigned int b = 'B'; // = 0x42 = 0100 0010

unsigned int c = 'C'; // = 0x43 = 0100 0011

unsigned int allTogether = 0 // 010000010100001001000011

unsigned int sixBit1 = 0; // 010000
unsigned int sixBit2 = 0; // 010100
unsigned int sixBit3 = 0; // 001001
unsigned int sixBit4 = 0; // 000011

allTogether = (a<<16)||(b<<8)||c;

sizbit1 = (allTogether&0x00FC0000)>>18;
sizbit2 = (allTogether&0x0003F000)>>12;
sizbit3 = (allTogether&0x00000FC0)>>6;
sizbit4 = (allTogether&0x0000003F);

关于C - 将三个 8 位字符操作为 24 位 block ,再转换为四个 6 位 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32810456/

相关文章:

c - pcap_compile() 表达式

python - 在 Python 中,将文件的 block 读取为十进制数字

c++ - if (flag==0) 或 if (0==flag) 哪个会执行得更快?

c - DirSync 页面大小选项

c# - 如何将复选框双向绑定(bind)到标志枚举的单个位?

java - 如何检查 TarArchiveEntry 是否设置了 3 个执行位中的任何一个?

Rust 为什么 (u32, u32) 的枚举变体的大小小于 (u64)?

c - 使用按位运算符计算 1 的数量

c# - 测试按位枚举值

c++ - 堆栈粉碎/回溯