【问题标题】:Unsigned Char Concat In CC中的无符号字符连接
【发布时间】:2016-12-30 14:38:53
【问题描述】:

我正在尝试将字符串消息转换为 C 中的十六进制值。

例如,如果我有类似“abc”的消息,我想在 162636 等之前收到它。我的代码如下。在这段代码中,我必须做一些 concat 操作来存储它们,但现在我只能存储 36 个。我该如何存储它们?

unsigned char swapNibbles(char x)
{
    return ( (x & 0x0F)<<4 | (x & 0xF0)>>4 );
}

void encode(char *message, char password[40]) {
    unsigned char *reversedInput = malloc(strlen(message));


    for (int i = 0; i < strlen(message); ++i) {
        reversedInput=swapNibbles(message[i]);
    }
    printf("%2x TERS ",reversedInput);
    //unsigned char *bitwiseMessage = (unsigned char*)message;
    //printf("DÜZ %s\n",bitwiseMessage);
    //printf("TERS %u\n", swapNibbles(bitwiseMessage));
}

【问题讨论】:

标签: c char unsigned-char


【解决方案1】:

编辑

我的十六进制编码解决方案:IDEOne


如果您希望对文本进行十六进制编码,则必须分配 两倍 与原始消息一样多的空间:

"abc" (3 bytes) ==> "616263" (6 bytes)

所以你需要:

unsigned char *reversedInput = malloc(2*strlen(message)+1);  // +1 for the final NULL-terminator

#include <string.h>
#include <malloc.h>

char* HexEncode(char* txt)
{
    char* hexTxt = calloc(2*strlen(txt)+1,1);
    for(char* p=hexTxt; *txt; p+=2)
    {
        sprintf(p, "%02x", *txt++);
    }
    return hexTxt;
}

int main() {
    char* hexText = HexEncode("Hello World");
    printf("Hexed is %s\n", hexText);
    free(hexText);

    return 0;
}

输出

Hexed is 48656c6c6f20576f726c64

【讨论】:

  • 谢谢 :) 我改好了
  • 注意:如果目的是存储字符reversedInput应该是char *类型。
  • 感谢您帮助我。非常感谢 :) 这正是我所需要的
  • sprintf(p, "%0x", *txt); --> sprintf(p, "%0x", (unsigned char)*txt);
  • 试试HexEncode("Hello\tWorld") --> "48656c6c6f9"sprintf(p, "%0x", *txt++); 只能打印 1 个字符。建议sprintf(p, "%02x", *txt++);
猜你喜欢
  • 1970-01-01
  • 2020-11-03
  • 1970-01-01
  • 2018-03-02
  • 1970-01-01
  • 1970-01-01
  • 2018-03-02
  • 2018-10-14
  • 2020-06-07
相关资源
最近更新 更多