代码
#include <iostream>
#include <string>
static const char BASE16_ENC_TAB[] = "0123456789ABCDEF";
static const char BASE16_DEC_TAB[128] = {
-1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, 0, 1, 2,
3, 4, 5, 6, 7, 8, 9, -1, -1, -1,
-1, -1, -1, -1, 10, 11, 12, 13, 14, 15,
};
int Base16Encode(const unsigned char* in, int size, char* out) {
for (int i = 0; i < size; i++)
{
char h = in[i] >> 4;
char l = in[i] & 0x0F;
out[i * 2] = BASE16_ENC_TAB[h];
out[i * 2 + 1] = BASE16_ENC_TAB[l];
}
return size * 2;
}
int Base16Decode(const std::string &in, unsigned char* out) {
for (int i = 0; i < in.size(); i+=2)
{
unsigned char ch = in[i];
unsigned char cl = in[i + 1];
unsigned char h = BASE16_DEC_TAB[ch];
unsigned char l = BASE16_DEC_TAB[cl];
out[i / 2] = h << 4 | l;
}
return in.size() / 2;
}
int main(int argc, char* argv[]) {
const unsigned char data[] = "测试代码test1234";
int len = sizeof(data);
char out1[1024] = { 0 };
unsigned char out2[1024] = { 0 };
std::cout << data << std::endl;
int re = Base16Encode(data, len, out1);
std::cout << re << ":" << out1 << std::endl;
int re1 = Base16Decode(out1, out2);
std::cout << re1 << ":" << out2 << std::endl;
return 0;
}
测试结果
