【问题标题】:Convert integer to Base 64 value将整数转换为 Base 64 值
【发布时间】:2014-02-26 18:14:15
【问题描述】:

我有一个整数值。我想将其转换为 Base 64 值。我尝试了以下代码。

byte[] b = BitConverter.GetBytes(123);
string str = Convert.ToBase64String(b);
Console.WriteLine(str);

它的输出为"ewAAAA==",包含 8 个字符。 我将相同的值转换为基数 16,如下所示

int decvalue = 123;
string hex = decvalue.ToString("X");
Console.WriteLine(hex);

前面代码的输出是 7B 如果我们在数学中这样做,结果是一样的。它有什么不同?我怎样才能获得与 Base 64 相同的值。 (我在网上找到了上面的base 64转换)

【问题讨论】:

  • Base 64 和 hex (base 16) 是不同的表示。为什么你期望相同的输出?
  • 例如,如果我们将基数的“10”转换为十六进制的“A”。如果我们使用base 64(以数学方式)它的“10”。我想把它弄出来。
  • @udaya726 是的,这是 base-64 算术; Convert 是 base-64 编码 - 非常不同
  • 我编辑了我的答案以提供类似的 base-64 转换;给出B7,听起来不错:B (==1)*64 + 7 (==59) ==> 123

标签: c# int type-conversion


【解决方案1】:

这个问题相当不清楚......“它有什么不同?” - 嗯,有很多不同的方式:

  • 一个是 base-16,另一个是 base-64(因此它们在本质上是不同的无论如何
  • 一个是做算术表示;一种是字节序列化格式 - 非常不同
  • 一个使用小端算法(假设是标准 CPU),另一个使用大端算法

要获得可比较 base-64 结果,您可能需要手动对其进行编码(因为Convert 仅支持base-8、base-10、base-16 进行算术转换)。也许(注意:未优化):

static void Main()
{
    string b64 = ConvertToBase64Arithmetic(123);

}


// uint because I don't care to worry about sign
static string ConvertToBase64Arithmetic(uint i)
{
    const string alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
    StringBuilder sb = new StringBuilder();

    do
    {
        sb.Insert(0, alphabet[(int)(i % 64)]);
        i = i / 64;
    } while (i != 0);
    return sb.ToString();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-09
    • 2018-01-22
    • 2013-07-09
    • 1970-01-01
    • 2018-03-23
    • 1970-01-01
    相关资源
    最近更新 更多