将整数转换为unsigned char *(int 221为“\ xdd”)

时间:2016-07-13 22:25:11

标签: c types

我有一个以unsigned char*为输入的函数。

比如说我有:

unsigned char* data = (unsigned char*) "\xdd";
int a = 221;

如何将我的整数a转换为unsigned char*,以便data和我转换后的a无法区分? 我试过玩sprintf,但没有任何运气,我不知道如何处理“\ x”部分。

2 个答案:

答案 0 :(得分:3)

由于continue不能保证是221类型的有效值,因此您可以做的最接近的事情是:

char

这是一个示例程序及其输出:

 int a = 221;
 unsigned char buffer[10];
 sprintf((char*)buffer, "%c", a);

输出:

#include <stdio.h>

int main()
{
    unsigned char* data = (unsigned char*) "\xdd";
    int a = 221;
    unsigned char buffer[10];
    sprintf((char*)buffer, "%c", a);
    printf("%d\n", buffer[0] == data[0]);
    printf("%d\n", buffer[0]);
    printf("%d\n", data[0]);
}

<强>更新

也许我误解了你的问题。您也可以使用:

1
221
221

答案 1 :(得分:1)

如上所述,问题没有意义且不可能 - 您实际上并不想转换为const char *,这是一种指针类型。相反,您希望转换为char的数组,然后使用其名称获取该数组的地址。

int x = 221;
char buf[5];
snprintf(buf, sizeof buf, "\\x%.2x", x);
/* now pass buf to whatever function you want, e.g.: */
puts(buf);