需要有关填充十六进制和一些转换的帮助

时间:2013-09-18 21:07:00

标签: c++ c string hex string-formatting

我将简要解释一下我想做什么并帮助升值。

我有一个十六进制数,格式为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上编译。

1 个答案:

答案 0 :(得分:2)

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

printf("%032X", x);

使用snprintf将其存储在字符串中:

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

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

char *as_string = NULL;
asprintf(&as_string, "%032X", x);