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