简体   繁体   中英

Converting integer to unsigned char* (int 221 to “\xdd”)

I have a function which takes unsigned char* as input.

Say for example that I have:

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

How can I convert my integer a to unsigned char* such that data and my converted a is indistinguishable? I have tried playing around with sprintf but without any luck, I'm not sure how to handle the "\\x" part.

Since 221 is not guaranteed to be a valid value for a char type, the closest thing you can do is:

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

Here's an example program and its output:

#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]);
}

Output:

1
221
221

Update

Perhaps I misunderstood your question. You can also use:

 int a = 221;
 unsigned char buffer[10] = {0};
 buffer[0] = a;

As stated the question does not make sense and is not possible - you don't actually want to convert to const char * , which is a pointer type. Instead you want to convert into an array of char s and then take the address of that array by using its name.

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);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM