ip192.168.1.104 转成十六进制逆序 6801A8C0的c语言实现
时间: 2024-09-06 10:08:23 浏览: 119
十进制转换成十六进制 c语言
在C语言中,将IP地址 "192.168.1.104" 转换为十六进制逆序 "6801A8C0" 可以通过以下步骤实现:
1. 将IP地址的每个十进制数字转换成其对应的8位二进制数。
2. 将得到的四个二进制数拼接起来,形成一个32位的二进制数。
3. 将这个32位的二进制数分成四个8位的部分,然后每个部分转换为对应的十六进制数。
4. 最后将这四个十六进制数逆序排列。
下面是C语言实现的代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 函数:将十进制数转换为8位二进制数的字符串
char* decToBin(unsigned int num) {
static char bin[9]; // 8位二进制数加上字符串结束符'\0'
for (int i = 7; i >= 0; --i) {
bin[i] = (num & (1 << i)) ? '1' : '0';
}
bin[8] = '\0'; // 字符串结束符
return bin;
}
// 函数:将8位二进制数转换为十六进制数的字符串
char* binToHex(const char *bin) {
static char hex[3]; // 2位十六进制数加上字符串结束符'\0'
unsigned int num = 0;
for (int i = 0; i < 8; ++i) {
num = (num << 1) | (bin[i] - '0'); // 将字符'0'或'1'转换为数字0或1
}
sprintf(hex, "%02X", num); // 转换为十六进制,并格式化为两位数
return hex;
}
int main() {
unsigned int ip[] = {192, 168, 1, 104}; // IP地址的四个部分
char bin[9] = {0}; // 存储转换后的二进制字符串
char hex[3] = {0}; // 存储转换后的十六进制字符串
// 对IP地址的每个部分进行转换
for (int i = 0; i < 4; ++i) {
sprintf(bin, "%08d", ip[i]); // 将十进制数转换为8位二进制字符串
printf("%s ", bin); // 打印二进制数
// 将二进制转换为十六进制,并逆序
char temp[3];
sprintf(temp, "%s", binToHex(bin)); // 转换为十六进制
printf("%s ", temp);
// 逆序
hex[2] = temp[0];
hex[1] = temp[1];
hex[0] = temp[2];
printf("%s\n", hex); // 打印逆序后的十六进制数
}
return 0;
}
```
这段代码首先定义了两个转换函数 `decToBin` 和 `binToHex`,分别用于十进制到二进制和二进制到十六进制的转换。然后在 `main` 函数中对IP地址的每个十进制数进行转换,最终输出每个部分的二进制表示、正常顺序的十六进制表示以及逆序的十六进制表示。
阅读全文