0

我将简要解释我想做的事情并感谢您的帮助。

我有一个十六进制数,格式为 16 字节数,如下所示:

1: std::string myhex = "00000000000000000000000000000FFD";  

然后我想把它转换成int。我认为我成功地使用了这个:

// convert hex to int
unsigned int x = strtoul(myhex.c_str(), NULL, 16);
printf("x = %d\n", x); // prints 4093 as needed

现在,我想将此整数转换回十六进制。我认为我也成功地使用了这个:

// Convert int back to hex
char buff[50];
string hexval;
sprintf(buff,"%x",x);
hexval = buff;
cout << hexval.c_str(); // prints "ffd".

但我的问题是,现在,我想将上面的“ffd”字符串转换回以前的格式,例如,用零填充的 16 字节数,如下所示:

00000000000000000000000000000FFD

我想转换字符串不仅打印它。

任何帮助如何做到这一点?如果我在上面实现的任何内容是错误的或不正确的,也欢迎任何更正。最好我也希望它也能在 Linux 上编译。

4

1 回答 1

2

在 a 中使用0标志(前缀)进行零填充和字段宽度规范printf

printf("%032X", x);

用于snprintf将其存储在您的字符串中:

snprintf(buff, sizeof(buff), "%032X", x);

或用于asprintf将其存储在新分配的字符串中,以确保该字符串可用的内存足够(因为它是由 分配的asprintf):

char *as_string = NULL;
asprintf(&as_string, "%032X", x);
于 2013-09-18T21:08:24.493 回答