2016-03-16 104 views
-3

我正在寻找一种方法将字符串转换为其十六进制表示形式的字符串。所以信A将被表示为0x41将字符串转换为C中的无符号字符

我想要做的是使用加密符号0x **的十六进制字符的算法来加密文本文件,其中**类似于字符的十六进制表示法。

我正在从文件读取16个字符的数组到字符数组,然后我应该将它们转换为十六进制表示法,以便我可以将它们传递给加密函数。

我正在使用下面的代码片段将字符数组转换为十六进制。我创建了一个TempBuffer来保存每个字符的十六进制值,所以它将在符号0x **中。我的问题是如何将TempBuffer中的值存储到Unsigned字符数组的元素中。请看下面的代码:

static uint8_t TextToEncrypt[16]; // Declaring the array to store the hexadecimal notation 

void ToHex(char InText[]) // The Function to Convert an array of characters to hexadecimal array 
{ 
    int i=0; 
    for(i=0; i<16; i++) 
    { 
     char TempBuffer[4]; // Tempbuffer to hold the converted value 
     sprintf(TempBuffer,"0x%x",InText[i]); // converting to hexadecimal 
     // Here i need to store the value in TempBuffer which will be something like 0x41 in TextToEncrypt[i] so I can pass it to encryption 
    } 
} 
+0

我试了很多,但没有任何结果,我更喜欢有东西保证测试它。我不能发布所有我想要的 –

+0

我认为有什么“十六进制数组”是一些混淆。也许你需要回到真正的问题,即加密代码。 – zaph

+0

您的问题已被问及回答数百次。你应该做一些研究,只需将你的标题转储到网络搜索并阅读前几个结果。 –

回答

0

可能是你需要的是atoi将字符串转换为整数,然后某种方式到整数转换为十进制为十六进制。看看this SO post。要转换为十六进制,我宁愿使用sprintf

将字符串转换为十进制:
char decstr[] = "1202"; 
int decimal = atoi(decstr); 
printf("%d\n", decimal); 

// prints 1202 
转换十进制为十六进制:
char hex[5]; 
sprintf(hex, "%x", decimal); 
printf("%s\n", hex); 

// prints 4b2 

编辑后OP加入一个例子

如在你的情况下,每个十六进制表示将有四个长度,哟你需要定义一个2d uint8_t数组。看看下面:

uint8_t TextToEncrypt[16][4]; 

void ToHex(char InText[]) 
{ 
    int i, j; 
    char TempBuffer[4]; 

    for(i=0; i<16; i++) 
    { 
     sprintf(TempBuffer,"0x%x", InText[i]); 
     for (j = 0; j < 4; ++j) 
      TextToEncrypt[i][j] = TempBuffer[j]; 
    } 

    for (i = 0; i < 16; ++i) 
    { 
     for(j=0; j<4; ++j) 
      printf("%c", TextToEncrypt[i][j]); 
     printf("\n"); 
    } 
} 

请记住,包括头stdint.h,如果您正在使用MinGW compiler

+0

它可能看起来很奇怪。但我首先尝试通过以下方式将每个字符转换为十六进制表示:sprintf(TempBuffer,“0x%x”,InText [i]);那么我想存储临时缓冲区的数据将是0x54或0x78或类似的东西,我想将它存储在类型为uint8_t的无符号字符中,该字符定义为这种格式。请原谅我的问题。 –

+0

感谢您的建议。我再次提出了这个问题。我删除了之前发布的答案。希望我可以找到一个解决方案,我上面说的点 –

+0

@MohammadMMoshawrab看看编辑答案。希望有所帮助,最后! –

0

我还是不正是你想要知道,这里是另一种尝试。

这只是给你一个想法,还是有很多的问题,如处理不好输入,做一些与outText

void toHex(char InText[]) 
{ 
    static int outInts[17]; 

    for(int i=0; i<16; i++) 
    { 
     outInts[i] = InText[i]; 
    } 
    for (int i=0; i<16; i++) { 
     printf("%i, ", outInts[i]); 
    } 
    printf("\n"); 
} 
    toHex("abcdefghijklmnopq"); 

输出:

97,98,99 ,100,101,102,103,104,105,106,107,108,109,110,111,112

如果这不是你想要的,你需要提供一个例子。

+0

非常感谢,但我的问题是将转换的文本存储在无符号整数数组中,而不是字符数组中。我无法根据我使用的算法对字符数组进行加密......任何想法 –