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