C++ 需要关于填充十六进制和一些转换的帮助吗
我将简要说明我想做什么,并表示感谢 我有一个十六进制数,格式为16字节数,如下所示:C++ 需要关于填充十六进制和一些转换的帮助吗,c++,c,string,hex,string-formatting,C++,C,String,Hex,String Formatting,我将简要说明我想做什么,并表示感谢 我有一个十六进制数,格式为16字节数,如下所示: 1: std::string myhex = "00000000000000000000000000000FFD"; 00000000000000000000000000000FFD 然后我想把它转换成int。我想我用这个成功地做到了: // convert hex to int unsigned int x = strtoul(myhex.c_str(), NULL, 16); printf("x =
1: std::string myhex = "00000000000000000000000000000FFD";
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".
现在,我想把这个整数转换回十六进制。我想我也成功地做到了这一点:
// 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".
我想转换字符串,而不仅仅是打印它
怎么做有什么帮助吗?
此外,任何更正,如果我所取得的任何上述是错误的或不好的欢迎。
我最好也在Linux上编译。在
printf
中使用0
标志(前缀)作为零填充和字段宽度规范:
printf("%032X", x);
char *as_string = NULL;
asprintf(&as_string, "%032X", x);
使用snprintf
将其存储在字符串中:
snprintf(buff, sizeof(buff), "%032X", x);
或者使用asprintf
将其存储在新分配的字符串中,以确保该字符串的可用内存足够(因为它是由asprintf
分配的):
谢谢你,泰德,不过那样就可以打印出来了,对吗?我只想买一根新的填充线。。现在用什么?也很高兴听到您对我在文章中提到的代码的其他部分有何看法。更新的答案表明了字符串格式化而非输出的替代
printf
-类函数。如果要自动拥有足够大的缓冲区,尤其应该使用asprintf()
而不是snprintf()
。您仍然需要检查这两种情况下的错误(即检查snprintf
或asprintf
的返回代码)。好的,ted,在您的情况下x是什么?它是整数吗?在我的例子中,我要填充的数字ffd
存储在字符串中…x
是您的无符号int x
变量。谢谢,似乎也没有必要像我在第二步中那样将int转换为十六进制。所以您的问题不是转换,但是关于如何将包含整数十六进制表示形式的字符串格式化为前导零呢?您是否阅读了sprintf的文档?请尽量使你的问题简洁明了,不那么开放。“我希望这也能在Linux上编译”似乎很奇怪,因为在此之前,您从未提到过您正在使用Windows。祝你好运现在还不清楚为什么您坚持用十六进制编码16字节的值,并认为使用只能包含4或8字节的转换函数是可以接受的。你是在追求“垃圾中的垃圾”谬论。与双精度显示器显示超过15位数的错误相同。右边那些多余的数字没有任何意义。正如在你的例子中,左边那些额外的零并不意味着什么。所以不要费心展示它们。让您的用户休息一下。Hans是对的-unsigned long
不够大,无法完成此任务,因此您使用的strtoul
是不正确的,很遗憾。@HansPassant:这不适合用户。我必须存储这个变量的地方只接受16个字节。此外,我认为存储在myhex
中的数字不会很大,例如超过4个字节。。在这种情况下你怎么看?@LightnessRacesinOrbit:请看我的上述评论