测试三

// 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';
}


posted @ 2024-06-06 14:13  20211312徐元琦  阅读(12)  评论(0编辑  收藏  举报