不使用打印将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;
}
所以我希望能够以某种方式将字符串更改为十六进制,如下所示:"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;
}