将有符号的 Int 转换为带空格的十六进制字符串

Convert a signed Int to a hex string with spaces

本文关键字:空格 十六进制 字符串 转换 符号 Int      更新时间:2023-10-16

我想知道我是否可以得到一些帮助,将整数转换为十六进制字符串,每个字节之间都有一个空格,就像这样-

int val = -2147483648;
char hexval[32];
sprintf(hexval, "%x", val)
Output = 80000000 

如何在每个字节之间添加空格,这样我就会有一个像 -> 80 00 00 00 这样的字符串

有没有比错误分配内存和移动指针更简单的方法?

谢谢!

一个简单的函数:

/**
 * 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);
}

例:

int main(void) {
    int val = -2147483648;
    char hexval[12];
    hexstr(hexval, val);
    printf("Integer value: %dn", val);
    printf("Result string: %sn", hexval);
    return 0;
}

整数值:-2147483648
结果字符串:80

00 00 00

作为替代方案,您可以考虑使用 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;