2013-04-07 3 views
0

UPDATE: Я могу сделать это легко от байтов до целых чисел, но текущий способ, который я делаю, кажется, не работает так хорошо.Преобразование целых чисел в массивы char (байты)

Вот мой текущий код:

static unsigned char* Int32ToBytes(signed int n) 
{ 
    unsigned char bytes[4]; 
    for(int i = 0;i<4;i++) 
     bytes[3-i] = (n & (255 << (i*8))) >> (i*8); 
    return bytes; 
} 

Я использую это, чтобы написать байты:

fwrite(Int32ToBytes(-1), 1 , 4 , file); 

Это вывод: FB 9C 8B 28, когда я хочу его для вывода FF FF FF FF (подписанные INTS).

Любые идеи? Помощь ценится :)

+0

Разве это не должно быть похоже на байты [3-i] = n & (255 << (i * 8))? – marcadian

+0

idk Вот почему я спросил здесь xD При выполнении этого я получил 0C 1C C7 46 – user1594121

+0

Я что-то пропустил, попробуйте эти байты [3-i] = (n & (255 << (i*8))) >> (i * 8). Кстати, на каком языке вы используете ? – marcadian

ответ

0

Кажется, работа для меня http://ideone.com/o6Llf9

void process(int x) 
{ 
    for(int i = 0;i<4;i++) 
    { 
     unsigned char res = (x & (255 << (i*8))) >> (i*8); 
     printf("%x " ,res); 
    } 
} 

int main() 
{ 
    int n; 
    while (scanf("%d",&n)!=EOF) process(n); 
    return 0; 
} 

что-то вроде этого будет также работать

for(int i = 0;i<4;i++) 
{ 
    bytes[3-i] = n & 255 
    n = n >> 8 
} 
0

www.cplusplus.com/reference/cstdlib/itoa/ It превращает int в char. Пример: int test; char buffer[33]; itoa(test, buffer, 10). Вам нужно включить stdlib.h.

+0

Хорошо ли это поддерживает разницу между подписанным и неподписанным? и как вы преобразовываете str в массив символов длиной 4 байта? – user1594121

+0

Он должен поддерживать подписанные/unsigned ints. Я думал, что вопрос был как преобразовать int в char? В любом случае, я предполагаю, что вы говорите об объекте std :: string. Пожалуйста, уточните свой вопрос. – refi64

Смежные вопросы