如何将数组元素(不仅仅是输出)转换为十六进制值

时间:2015-05-21 16:58:24

标签: c rijndael

我必须在C中实现Rijndael算法。我从这开始:

   #include <stdio.h>
   #include <stdlib.h>
   int main() {
    int i=0,j;
    char m[5000];
    char message[5000];
    char ch;
    printf("Introduce the message\n\n");
    while((ch=getchar())!='\n')
    {
        message[i]=ch;
        i++;
    }
    message[i]='\0';
    i=0;
    while(message[i]!='\0')
    {
        sscanf(&message[i],"%x",&m);
        i++;
    }
    printf("\nResult\n");
    for(j=0;j<i;j++)
    {
        printf(" %x",&m[j]);
    }
    printf("\n");
}

我需要一个数组,其中例如&#34; Hello&#34;(其中array1 [0]将显示H)将被写为48656c6c6f,并且当调用array2 [0]时它将显示48。

2 个答案:

答案 0 :(得分:1)

您想要message内容的十六进制表示吗?如果是这样,你需要的是:

char messageHex[sizeof(message)*2];
memset(messageHex, 0, sizeof(messageHex));
size_t len = strlen(message);
for (size_t i = 0; i < len; i++)
{
    sprintf(messageHex + i*2, "%02X", message[i] & 0xFF);
}

答案 1 :(得分:0)

十进制表示中创建包含十六进制值的数组有什么用?毕竟它是相同的数值。

打印它就像printf("%x\n", arr[0]);一样简单。

如果你坚持,那么你可以有一个字符串数组(char*),每个字符串都包含十六进制值的字符串,那么你可能想要使用sprintf()(所以你不需要自己做任何计算)如下:

unsigned char** hex_arr = malloc(arrLen); //arrLen is the integer array length
for(i = 0 ; i < arrLen ; i++) //declare i first
{
    hex_arr[i] = malloc(3); //2 characters and null (two hexadecimal notes can represent up to 255 which is the size of the wide ASCII table)
    sprintf(hex_arr[i], "%x", (uint8_t)arr[i]); //as arr is your integer array
}

请注意,您还可以将所有内容组织到一个字符串(char*),其中整数数组中i点的每个字符都由两个字符表示:xArr[i*2]和{{ 1}}

干杯。