我必须在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。
答案 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}}
干杯。