在 C 中将字符串转换为无符号字符



我正在寻找一种将字符串转换为十六进制表示字符串的方法。因此,字母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

如果这不是您想要的,则需要提供一个示例。

相关内容

  • 没有找到相关文章

最新更新