将带符号的 Int 转换为带空格的十六进制字符串
Posted
技术标签:
【中文标题】将带符号的 Int 转换为带空格的十六进制字符串【英文标题】:Convert a signed Int to a hex string with spaces 【发布时间】:2014-12-12 04:58:19 【问题描述】:我想知道是否可以帮助我将整数转换为十六进制字符串,每个字节之间有一个空格,就像这样-
int val = -2147483648;
char hexval[32];
sprintf(hexval, "%x", val)
Output = 80000000
如何在每个字节之间添加空格,这样我就会有一个类似 -> 80 00 00 00 的字符串
有没有比 malloc'ing 内存和移动指针更简单的方法?
谢谢!
【问题讨论】:
【参考方案1】:一个简单的函数:
/**
* hexstr(char *str, int val);
*
* `str` needs to point to a char array with at least 12 elements.
**/
int hexstr(char *str, int val)
return snprintf(str, 12, "%02hhx %02hhx %02hhx %02hhx", val >> 24, val >> 16, val >> 8, val);
Example:
int main(void)
int val = -2147483648;
char hexval[12];
hexstr(hexval, val);
printf("Integer value: %d\n", val);
printf("Result string: %s\n", hexval);
return 0;
整数值:-2147483648 结果字符串:80 00 00 00
【讨论】:
@Gopi 哎呀,我以为我在复制到这里之前已经解决了这个问题,但显然没有。 为什么不在缓冲区中添加空格而不是进行移位操作? 不是动态的,如果val = 1
呢?输出将以额外的零作为前缀。 00 00 00 01
.
我想太多了,谢谢你带回地球。【参考方案2】:
作为替代方案,您可以考虑使用std::hex
。示例:
#include <iostream>
int main()
int n=255;
std::cout << std::hex << n << std::endl;
return 0;
更新:
不依赖于打印内容的更灵活的实现可以是
void gethex(int n, std::ostream &o)
o << std::hex << n;
然后
std::ostringstream ss;
gethex(myNumber, ss);
std::cout << "Hex number: " << ss.str() << std::endl;
【讨论】:
但是,这不会将其存储在字符串中。所以你应该使用stringstream
而不是cout
。以上是关于将带符号的 Int 转换为带空格的十六进制字符串的主要内容,如果未能解决你的问题,请参考以下文章