C++十进制int转换为十六进制char数组有什么比较好的方法?

C++十进制int转换为十六进制char有什么比较好的方法?

UPDATE:
比如说 17 我希望变化后的结果是 char(0x00) char(0x11)
而是不是 “11” char("1") char ("1")

阅读 13.9k
3 个回答

搞嵌入式的朋友推荐了一个方法

x & 0xFF; x >> 8

int a=11123456;
char str[20]={0};
sprintf(str, "%x", a);

#include <stdio.h>

int main(int argc, const char *argv[])
{
    int n = 17;
    char arr[sizeof(int)] = { 0 };
    for (int i = 0; i < sizeof(int); i++) {
        arr[i] = (n >> (((sizeof(int) - 1) - i) << 3)) & 0xFF;
    }
    for (int i = 0; i < sizeof(int); i++) {
        printf("0x%02X\n", arr[i]);
    }
    return 0;
}

这里实际上是将int转换为等同大小字节数的char数组。
一般int是 4 字节,但这里使用sizeof(int)来确定大小。
如果确定是 2 字节的话,直接这样就行了:

#include <stdio.h>

int main(int argc, const char *argv[])
{
    int n = 17;
    char arr[2] = { 0 };
    arr[0] = (n >> 8) & 0xFF;
    arr[1] = n & 0xFF;
    for (int i = 0; i < sizeof(arr); i++) {
        printf("0x%02X\n", arr[i]);
    }
    return 0;
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题