测试三
// utils.h
#ifndef _UTIL_H_
#define _UTIL_H_
//char Hex2Char(int i);
//int Char2Hex(char c);
int Hex2Char(int fromi, char *toc);
int Char2Hex(char fromc, int *toi);
int Bitstr2ByteArr(char *bs, char *ba);
int ByteArr2Bitstr(char *ba, char *bs);
int Int2ByteArr(int i, char *ba);
int ByteArr2Int(char *ba, int *i);
#endif
// utils.c
#include <stdio.h>
#include "util.h"
const char Hstr[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
char Hex2Char(int i) {
if (i >= 0 && i <= 9) {
return i + 0x30;
// return i + '0'
}
if (i >= 10 && i <= 15) {
return i + 0x37;
// return i + 'A' - 10
}
return 0;
}
// main.c
#include <stdio.h>
#include "utils.h"
int main() {
int n1, n2;
char c1, c2;
printf("请输入一个0~15的数:");
scanf("%d", &n1);
Hex2Char(n1, &c1);
printf("对应的16进制字符是%c\n", c1);
printf("请输入一个16进制字符:");
scanf("%c", &c2); // 注意这里应该是 "%c" 而不是 "%s"
Char2Hex(c2, &n2);
printf("%c对应的数是%d\n", c2, n2);
return 0;
}
下面是经过整理后的代码,已使用 Markdown 格式整理:
// utils.h
#ifndef _UTIL_H_
#define _UTIL_H_
int BitStr2ByteArr(char *bs, char *ba);
int ByteArr2BitStr(char *ba, char *bs);
#endif
// utils1.c
#include <stdio.h>
#include <string.h>
#include "utils.h"
int Hex2Char(int fromi, char *toc) {
if (fromi >= 0 && fromi <= 9) {
*toc = fromi + '0';
} else if (fromi >= 10 && fromi <= 15) {
*toc = fromi + 'A' - 10;
} else {
printf("error");
}
return 0;
}
int Char2Hex(char fromc, int *toi) {
if (fromc >= '0' && fromc <= '9') {
*toi = fromc - '0';
} else if (fromc >= 'A' && fromc <= 'F') {
*toi = fromc - 'A' + 10;
} else {
printf("error");
}
return 0;
}
int ByteArr2BitStr(char *ba, char *bs) {
int i, j, L, k, a;
L = strlen(ba);
for (j = 0; j < L; j++) {
Char2Hex(ba[j], &a);
for (i = 0; i < 4; i++) {
bs[3 * (j + 1) - i + j] = a % 2 + '0';
a = a / 2;
}
}
bs[4 * L] = '\0';
}
int BitStr2ByteArr(char *bs, char *ba) {
int i, k, j, L;
L = strlen(bs);
char string[100];
int sum = 0;
if (L % 4 == 1) {
strcpy(string, "000");
strcat(string, bs);
k = L / 4 + 1;
} else if (L % 4 == 2) {
strcpy(string, "00");
strcat(string, bs);
k = L / 4 + 1;
} else if (L % 4 == 3) {
strcpy(string, "0");
strcat(string, bs);
k = L / 4 + 1;
} else {
k = L / 4;
strcpy(string, bs);
}
for (i = 0; i < k; i++) {
for (j = 0; j < 4; j++) {
sum = sum * 2;
sum = sum + (string[4 * i + j] - '0');
}
Hex2Char(sum, &ba[i]);
sum = 0;
}
ba[i] = '\0';
}