【问题标题】:base 64 string to hexa stringbase64 字符串转十六进制字符串
【发布时间】:2011-01-13 13:14:17
【问题描述】:

如何从 base64 字符串转换为 hexa 字符串(我正在使用 ubuntu - c++ 代码)。我的六边形字符串我想像 0x0c .... 等等。需要帮忙。有人可以给我一个例子吗?谢谢!

【问题讨论】:

  • 至少有 12 种不同的方式可以将 base64 编码的字符串转换为十六进制数字字符串,所有这些方法都有不同的结果——你说的是哪种结果并不明显。请详细说明您想到的转换类型。
  • 这需要两次转换。首先从 base64 到 unsigned char[]。然后从那个到一串十六进制数字。 c++ 标签下的其他问题很好地涵盖了这两个问题。
  • @Hans:这不太准确。他的base64字符串已经是字符数组了;所需要的是将其从字符数组转换为整数,然后再转换回具有十六进制编码的字符数组。
  • 例如我有字符串值:std::string ssir = "DNQwSinfOUSSWd+U04r23A==";我想创建一个 char values[]={ 0x0C, 0xD4, 0x30, 0x4a, 0x29, 0xdf, 0x39, 0x44, 0x92, 0x59, 0xdf, 0x94, 0xd3, 0x8a, 0xf6, 0xdc };这是ssir base64的六边形
  • 其实不是。在内存中,它都是二进制的。那个0x0C?那真的是00001100。正如 Hans Passant 所说,您确实希望 Base64 进行二进制解码。您通常免费获得的二进制到十六进制(例如,在调试器中查看 char values[] 时。)

标签: c++ base64


【解决方案1】:

使用通用(虽然不是标准)功能的快速解决方案:

std::string input = MY_ENCODED_STRING;
unsigned long decoded_value = strtol(input.c_str(), NULL, 64);
char buffer[100] = {0};
std::string output = itoa(decoded_value, buffer, 16);

boost::lexical_cast 或许能够提供更优雅的解决方案(不过不确定)。

【讨论】:

  • 我在 ubuntu 中工作,使用 c++ 代码。什么是itoa?我在哪个图书馆找到它?
  • 我需要一个 c++ 示例。有人可以帮我吗?谢谢
  • itoa 通常包含在 stdlib.h 中,如果您的编译器支持它(同样,它不是标准函数,但相当常见)。
  • 维基百科文章有一个这样的字符串的例子。想象一下当你对它使用 strtol() 时会发生什么。
  • 我在 itoa 出现以下错误:错误:从‘long unsigned int’到‘const char*’的无效转换
猜你喜欢
  • 1970-01-01
  • 2018-03-01
  • 1970-01-01
  • 2017-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-20
相关资源
最近更新 更多