二进制转成十六进制

二进制转成十六进制

1.基本原理:由于十六进制数基数是2的四次幂,所以一个二进制转换为十六进制,如果是整数,只要从它的低位到高位每4位组成一组,然后将每组二进制数所对应的数用十六进制表示出来。如果有小数部分,则从小数点开始,分别向左右两边按照述方法进行分组计算。

(11010111100010111)2 = (3AF17)16

原文:

http://www.chinatax.gov.cn/jypx/jsjjczs/zp_2to16.htm

2.二进制与十六进制的关系

2进制 0000 0001 0010 0011 0100 0101 0110 0111

16进制 0 1 2 3 4 5 6 7

2进制 1000 1001 1010 1011 1100 1101 1110 1111

16进制 8 9 a(10) b(11) c(12) d(13) e(14) f(15)

可以用四位数的二进制数来代表一个16进制,如(3A)16 转为二进制为:

3为0011A 1010,合并起来为00111010。可以将最左边的0去掉得(111010)2

右要将二进制转为16进制,只需将二进制的位数由右向左每四位一个单位分隔,将各单位对照出16进制的值即可。

3.示例1

FILE *dest = fopen("aa.txt", "r+"); //写入16进制的文件

FILE *src = fopen("a.cpp", "r");    //读入的文件

while( (ch = getc(src) ) != EOF )

{

fprintf(dest, "%2x", ch);

}

4.示例2

char* bin2hex(char *src, unsigned int size)

{

char dest[100] = {0};

if(sizeof(dest)/2 < size)

{

size = sizeof(dest)/2;

}

for(int i = 0; i < size; i++)

{

sprintf(&dest[i*2], "%2x", (unsigned char)src[i]);

}

return dest;

}

原文:

http://zhidao.baidu.com/question/185562563.html

更为详细的介绍

http://www.cnblogs.com/lds85930/archive/2007/09/19/897912.html

http://bbs.youkuaiyun.com/topics/270017393

在C语言中,将数组中存储的二进制数据转换为十六进制通常需要通过几个步骤来完成。首先,你需要读取二进制数组并将其视为二进制数;然后逐位处理这个二进制数,将其转换成对应的十六进制字符;最后,把这些字符组合起来形成完整的十六进制字符串。 以下是一个简单的示例,假设我们有一个名为`binary_array`的二进制数组: ```c #include <stdio.h> #include <string.h> // 函数用于将二进制数组转换为十六进制字符串 char* binary_to_hex(char *binary_array, int length) { char hex[8]; // 预留足够的空间存放最多4个字节的十六进制 char* result = malloc(length * 2 + 1); // 考虑到每一位二进制对应两位十六进制 int i, j; for (i = 0; i < length; i++) { if (binary_array[i] == '0') { hex[j++] = '0'; } else if (binary_array[i] == '1') { hex[j++] = '1'; } else if (binary_array[i] >= '2' && binary_array[i] <= '7') { // 从二进制的10进制表示中提取 hex[j++] = ((binary_array[i] - '2') / 4) + '0'; // 取前四位 hex[j++] = (binary_array[i] - '2') % 4 + '0'; // 取最后四位 } else { printf("Invalid binary digit found.\n"); return NULL; } } hex[j] = '\0'; // 结束字符串 // 将十六进制数组复制到结果字符串 strcpy(result, hex); return result; } int main() { char binary[] = "10101010"; // 示例二进制数组 int binary_length = strlen(binary); char *hex_result = binary_to_hex(binary, binary_length); if (hex_result) { printf("Binary %s is in hexadecimal: %s\n", binary, hex_result); free(hex_result); // 释放内存 } return 0; } ``` 在这个例子中,`binary_to_hex`函数会遍历二进制数组,并将每个二进制位转换成相应的十六进制数字。注意,这仅适用于小端序(最低有效位先)。如果数组存储的是大端序二进制,你需要调整转换过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值