2016-12-30 3 views
-3

им пытаются преобразовать сообщение строку в шестнадцатеричное значение в С.Unsigned Char Concat В C

Например, если у меня есть сообщение, как «ABC» я хочу иметь его 162636 и т.д. Мой код находится ниже. В этом коде я должен выполнить некоторую операцию concat, чтобы сохранить их все, но теперь я могу хранить только 36. Как я могу их хранить?

unsigned char swapNibbles(char x) 
{ 
    return ((x & 0x0F)<<4 | (x & 0xF0)>>4); 
} 

void encode(char *message, char password[40]) { 
    unsigned char *reversedInput = malloc(strlen(message)); 


    for (int i = 0; i < strlen(message); ++i) { 
     reversedInput=swapNibbles(message[i]); 
    } 
    printf("%2x TERS ",reversedInput); 
    //unsigned char *bitwiseMessage = (unsigned char*)message; 
    //printf("DÜZ %s\n",bitwiseMessage); 
    //printf("TERS %u\n", swapNibbles(bitwiseMessage)); 
} 
+1

Этот ответ обеспечивает способ сделать это http://stackoverflow.com/a/41356195/7076153 – Stargateur

+5

[Пожалуйста, просмотрите эту дискуссию о том, почему бы не использовать возвращаемое значение 'malloc()' и family в 'C'.] (Http://stackoverflow.com/q/605845/2173917). –

+0

@SouravGhosh, если я не брошу его, я получу ошибку сегментации – Berkin

ответ

1

Редактировать

Мое решение для шестнадцатеричного кодирования: IDEOne


Если вы хотите, чтобы ваш текст был шестигранной закодированы, вам придется выделить дважды столько же места, сколько оригинальное сообщение:

"abc" (3 bytes) ==> "616263" (6 bytes) 

Таким образом, вы будете нуждаться:

unsigned char *reversedInput = malloc(2*strlen(message)+1); // +1 for the final NULL-terminator 

#include <string.h> 
#include <malloc.h> 

char* HexEncode(char* txt) 
{ 
    char* hexTxt = calloc(2*strlen(txt)+1,1); 
    for(char* p=hexTxt; *txt; p+=2) 
    { 
     sprintf(p, "%02x", *txt++); 
    } 
    return hexTxt; 
} 

int main() { 
    char* hexText = HexEncode("Hello World"); 
    printf("Hexed is %s\n", hexText); 
    free(hexText); 

    return 0; 
} 

Выход

Hexed is 48656c6c6f20576f726c64 
+0

Спасибо :) Я отбраковал его – Berkin

+0

Примечание: если целью является знак запаса, 'reverseedInput' должен иметь тип' char * '. – Stargateur

+0

Спасибо, что помогли мне. Спасибо alot :) Вот что мне нужно – Berkin

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