不使用打印将ascii转换为十六进制

Convert to ascii to hex without using print

所以我希望能够以某种方式将字符串更改为十六进制,如下所示:"ab.c2" --> "61622e6332"。我在网上找到的所有帮助都显示了如何使用打印来完成此操作,但我不想使用打印,因为它不存储十六进制值。

目前我所知道的是,如果你把一个 char 转换成一个 int,你会得到 ascii 值,然后我可以得到十六进制,这让我很困惑。

这是一个方法,一个完整的程序,但"meat"在tohex函数中:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char * tohex (unsigned char *s) {
    size_t i, len = strlen (s) * 2;

    // Allocate buffer for hex string result.
    // Only output if allocation worked.

    char *buff = malloc (len + 1);
    if (buff != NULL) {
        // Each char converted to hex digit string
        // and put in correct place.

        for (i = 0; i < len ; i += 2) {
            sprintf (&(buff[i]), "%02x", *s++);
        }
    }

    // Return allocated string (or NULL on failure).

    return buff;
}

int main (void) {
    char *input = "ab.c2";

    char *hexbit = tohex (input);
    printf ("[%s] -> [%s]\n", input, hexbit);
    free (hexbit);

    return 0;
}

当然有其他方法可以达到同样的效果,例如如果你能确保提供足够大的缓冲区就可以避免内存分配,比如:

#include <stdio.h>

void tohex (unsigned char *in, char *out) {
    while (*in != '[=11=]') {
        sprintf (out, "%02x", *in++);
        out += 2;
    }
}

int main (void) {
    char input[] = "ab.c2";
    char output[sizeof(input) * 2 - 1];
    tohex (input, output);
    printf ("[%s] -> [%s]\n", input, output);
    return 0;
}