【问题标题】:Int Array to Base64 in C# like sjcl.codec.base64.fromBits does像 sjcl.codec.base64.fromBits 一样,C# 中的 Int Array 到 Base64
【发布时间】:2014-05-07 16:08:03
【问题描述】:

在 JavaScript 中,这样做:

var numbers = new Array(1042147201, -1682263442, -1463053899, 1834416100)
sjcl.codec.base64.fromBits(numbers)

返回“Ph3ngZu6sm6oy5G1bVb35A==”,但在 C# 中执行此操作:

var numbers = new[] { 1042147201, -1682263442, -1463053899, 1834416100 };
var byteNumbers = new byte[numbers.Length * sizeof(int)];
Buffer.BlockCopy(numbers, 0, byteNumbers, 0, byteNumbers.Length);
Convert.ToBase64String(byteNumbers);

返回 "gecdPm6yupu1kcuo5PdWbQ=="
为什么结果不同,我必须做什么才能获得与 JavaScript 相同的结果?

【问题讨论】:

    标签: c# arrays int base64 sjcl


    【解决方案1】:

    查看您对 endianness of ints 有问题的两段代码的输出

    1834416100 - > 6D 56 F7 E4
    Ph3ngZu6sm6oy5G1bVb35A==  -> 3E 1D E7 81 9B BA B2 6E A8 CB 91 B5 6D 56 F7 E4
    gecdPm6yupu1kcuo5PdWbQ==  -> 81 E7 1D 3E 6E B2 BA 9B B5 91 CB A8 E4 F7 56 6D
    

    可能的修复:添加到数组时反转每个整数,如BitConverter 类中所示

      int value = 12345678;
      byte[] bytes = BitConverter.GetBytes(value);
      if (BitConverter.IsLittleEndian)
         Array.Reverse(bytes); 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-06
      • 1970-01-01
      • 2016-06-10
      相关资源
      最近更新 更多