gpt4 book ai didi

c - 带有自定义 hextable 的 Base16

转载 作者:太空宇宙 更新时间:2023-11-04 04:54:54 25 4
gpt4 key购买 nike

我想使用 Base16 编码/解码数据,但使用自定义十六进制表(与传统的“0123456789ABCDEF”相反)

我考虑过在写完后简单地用相应的数字/字母替换每个数字/字母,但我发现由于显而易见的原因效率低下

这是一个 iphone 应用程序,这意味着我使用的是 objective-c 代码,但 C 和 C++ 也可以使用它。

我在这里试过代码:http://www.koders.com/c/fid4FE13B3E182CA09D7F399059A96DBF0A7968BA5C.aspx?s=base64

#ifdef HAVE_CONFIG_H
# include <config.h>
#endif

#include <string.h>
#include <stdlib.h>

#include "ggz.h"
#include "base16.h"

/* Function to encode strings to base16 (hex) with a nibble per hex character */

char *ggz_base16_encode(const char *text, int length)
{
char *ret = NULL;
int i;
static const char hextable[20] = "0123456789abcdef";

if(!text) return NULL;

ret = ggz_malloc((length * 2 + 1)*sizeof(*ret));
if(!ret) return NULL;

for(i = 0; i < length; i++){
ret[i*2] = hextable[(text[i]&0xf0)>>4];
ret[i*2+1] = hextable[text[i]&0xf];
}
return ret;
}

但是我没有在同一个网站上找到解码方法,而且它也不管用。这是我对应的 objective-c 代码:

NSString *txt = @"hello";
NSData *data = [txt dataUsingEncoding:NSUTF8StringEncoding];
const char *nc = ggz_base16_encode(data.bytes, [data length]);
NSString *str = [[NSString alloc] initWithCString:nc encoding:NSUTF8StringEncoding];
}

非常感谢您的帮助。

谢谢

最佳答案

解码代码应该很简单,像这样:

int result = 0;
for each char c in string (left to right)
result = result * 16 + getNumericValue(c)

(伪代码!)

对于 getNumericValue,一般来说,我会使用一个预填充的映射(字典/哈希表/任何你喜欢的语言),它只是将 char 映射到它的数值。

对于传统的十六进制表示法,可以按如下方式构造映射:

for (int i = '0'; i <= '9'; i++)
map[i] = i - '0';
for (int i = 'a'; i <= 'f'; i++)
map[i] = i - 'a' + 10;

-- 但对于您的特殊映射,您将需要您的习惯表。

(我不是Objective C的专家,所以我不知道那里合适的数据结构是什么。)

关于c - 带有自定义 hextable 的 Base16,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9959537/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com