Int数组到C#中的Base64,就像sjcl.codec.Base64.fromBits一样

Int数组到C#中的Base64,就像sjcl.codec.Base64.fromBits一样,c#,arrays,int,base64,sjcl,C#,Arrays,Int,Base64,Sjcl,在JavaScript中,执行以下操作: var numbers = new Array(1042147201, -1682263442, -1463053899, 1834416100) sjcl.codec.base64.fromBits(numbers) 返回“Ph3ngZu6sm6oy5G1bVb35A==”,但在C#中执行此操作: 返回“gecdPm6yupu1kcuo5PdWbQ==” 为什么结果不同?我该怎么做才能得到与JavaScript相同的结果?查看两段代码的输出,这两段代

在JavaScript中,执行以下操作:

var numbers = new Array(1042147201, -1682263442, -1463053899, 1834416100)
sjcl.codec.base64.fromBits(numbers)
返回“Ph3ngZu6sm6oy5G1bVb35A==”,但在C#中执行此操作:

返回“gecdPm6yupu1kcuo5PdWbQ==”

为什么结果不同?我该怎么做才能得到与JavaScript相同的结果?

查看两段代码的输出,这两段代码对int有问题

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


查看两段代码的输出,这两段代码对int有问题

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

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);
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
  int value = 12345678;
  byte[] bytes = BitConverter.GetBytes(value);
  if (BitConverter.IsLittleEndian)
     Array.Reverse(bytes);