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

时间:2014-12-12 04:58:19

标签: c++ c string int

我想知道我是否可以帮助将整数转换为十六进制字符串,每个字节之间有一个空格,如此 -

int val = -2147483648;
char hexval[32];

sprintf(hexval, "%x", val)

Output = 80000000 

我怎么能在每个字节之间添加间隔,所以我会有一个字符串 - > 80 00 00 00

是否有更简单的方法,然后malloc内存和移动指针?

谢谢!

2 个答案:

答案 0 :(得分:3)

一个简单的功能:

/**
 * 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

答案 1 :(得分:0)

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