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