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

不使用打印将ascii转换为十六进制,c,hex,C,Hex,所以我希望能够以某种方式将字符串更改为十六进制,比如:“ab.c2”->“61622e6332”。我在网上找到的所有帮助都显示了如何使用print来实现,但我不想使用print,因为它不存储十六进制值 到目前为止,我所知道的是,如果你取一个字符并将其转换为int,你就会得到ascii值,然后我就可以得到十六进制,这就是我要解决的问题。这里有一种方法,一个完整的程序,但“肉”在tohex函数中: #include <stdio.h> #include <stdlib.h>

所以我希望能够以某种方式将字符串更改为十六进制,比如:“ab.c2”->“61622e6332”。我在网上找到的所有帮助都显示了如何使用print来实现,但我不想使用print,因为它不存储十六进制值

到目前为止,我所知道的是,如果你取一个字符并将其转换为int,你就会得到ascii值,然后我就可以得到十六进制,这就是我要解决的问题。

这里有一种方法,一个完整的程序,但“肉”在
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;
}
#包括
#包括
#包括
char*tohex(无符号char*s){
尺寸i,len=strlen(s)*2;
//为十六进制字符串结果分配缓冲区。
//只有在分配有效时才输出。
char*buff=malloc(len+1);
如果(buff!=NULL){
//每个字符转换为十六进制数字字符串
//并放在正确的位置。
对于(i=0;i[%s]\n”,输入,十六进制位);
自由(六位);
返回0;
}
当然,还有其他方法可以达到同样的效果,例如,如果您可以确保自己提供足够大的缓冲区,则可以避免内存分配,例如:

#include <stdio.h>

void tohex (unsigned char *in, char *out) {
    while (*in != '\0') {
        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;
}
#包括
void tohex(无符号字符*输入,字符*输出){
而(*in!='\0'){
sprintf(out,“%02x”,*in++);
out+=2;
}
}
内部主(空){
字符输入[]=“ab.c2”;
字符输出[sizeof(输入)*2-1];
tohex(输入、输出);
printf(“[%s]->[%s]\n”,输入,输出);
返回0;
}

什么是
打印
?C中没有这个名称。你的意思是
printf
?你不需要将字符转换为int。
char
在C中是一个整数类型。你可以一个字符一个字符地迭代字符串。所有非常有用的注释。谢谢可能是重复的我想知道他/她真正想要的是
uint64\u t result=0x61622e6332
。关于这一点,问题一点也不清楚。@user3386109,可能是这样,但他们陈述的事实
“ab.c2”->“61622e6332”
似乎表明了一个字符串结果。此外,它们表示“不使用打印”(可能是printf),并且没有明智的方法从带有
printf
:-)的字符串中获取整数值,绿色复选框确认:)