C语言常用方法

static char int2HexChar(int i) {
    return (char) (i < 10 ? i + '0' : i - 10 + 'A');
}
static int hexChar2Int(char c) {
    const char hex[] = "0123456789ABCDEF";
    const char *p1 = strchr(hex, toupper(c));
    if (p1) {
        return p1 - hex;
    }
    return 0;
}

/**
 * 是否为十六进制字符串
 */
static bool isHexString(char *password) {
    bool result = true;
    size_t len = strlen(password);
    for (int i = 0; i < len; i++) {
        if (!isxdigit(password[i])) {
            result = false;
            break;
        }
    }
    return result;
}

/**
 * 16进制字符串转化为字节数组
 */
static void hexString2ByteArray(char *input, unsigned char *output) {
    size_t len = strlen(input);
    for (int i = 0; i < len / 2; i++) {
        int high = hexChar2Int(input[2 * i]);
        int low = hexChar2Int(input[2 * i + 1]);
        output[i] = (high << 4) | low;
    }
}

/**
 * 字节数组转化为16进制字符串
 */
static void byteArray2HexString(char *input,char *ouput){
    size_t len = strlen(input);
    int j=0;
    for(int index=0;index<len;index++){
        int x=input[index] & 0xFF;
        ouput[j++]=int2HexChar(x >> 4);
        ouput[j++]=int2HexChar(x & 0xF);
    }
}

 

int main(int argc, char *argv[]) {
    char password[] = "32ED87BDB5FDC5E9CBA88547376818D4";
    unsigned char ntbuffer[16];
    size_t len = strlen(password);
    if (len == 32 && isHexString(password)) {
        hexString2ByteArray(password, ntbuffer);
    }
    for(int i=0;i<16;i++){
        printf("%d\n",ntbuffer[i]);
    }
    
    char hexstr[32];
    byteArray2HexString((char *)ntbuffer, hexstr);
    for(int i=0;i<32;i++){
        printf("%c",hexstr[i]);
    }
    printf("\n");
    return 0;
}

 

posted @ 2022-02-10 19:32  南极冰川雪  阅读(137)  评论(0编辑  收藏  举报