我正在寻找一种将字符串转换为十六进制表示字符串的方法。因此,字母A
将表示为 0x41
.
我正在尝试做的是使用一种算法加密文本文件,该算法加密表示法 0x** 的十六进制字符,其中 ** 类似于字符的十六进制表示法。
我正在从文件中读取一个 16 个字符的数组到一个字符数组,然后我应该将它们转换为十六进制表示法,以便我可以将它们传递给加密函数。
我使用以下代码片段将字符数组转换为十六进制。我创建了一个 TempBuffer 来保存每个字符的十六进制值,因此它将采用表示法 0x**。我的问题是如何将 TempBuffer 中的值存储到无符号字符数组的元素中。查看下面的代码:
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
}
}
您可能需要atoi
将字符串转换为整数,然后以某种方式将该十进制整数转换为十六进制。看看这个SO帖子。要转换为十六进制,我更喜欢使用 sprintf
.
char decstr[] = "1202";
int decimal = atoi(decstr);
printf("%dn", decimal);
// prints 1202
将十进制转换为十六进制: char hex[5];
sprintf(hex, "%x", decimal);
printf("%sn", hex);
// prints 4b2
OP 添加示例后编辑
由于您案例中的每个十六进制表示形式的长度为 4,因此您需要定义一个 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 编译器
我仍然不知道你想要什么,这是另一个尝试。
这只是为了给你一个想法,还有很多问题,例如处理错误的输入和对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
元
如果这不是您想要的,则需要提供一个示例。