我們無法猜測你想要的輸出我讓自己寫丟失的可能性(代碼中的註釋)什麼exacly ...你可以選擇你真實地需要:
internal class Program
{
private static int ReverseBytes(long val)
{
byte[] intAsBytes = BitConverter.GetBytes(val);
Array.Reverse(intAsBytes);
return BitConverter.ToInt32(intAsBytes, 0);
}
private static string IntToBinaryString(long v)
{
string s = Convert.ToString(v, 2);
string t = s.PadLeft(32, '0');
string res = "";
for (int i = 0; i < t.Length; ++i)
{
if (i > 0 && i%8 == 0)
res += " ";
res += t[i];
}
return res;
}
private static void Main(string[] args)
{
string sValue = "8BABEEF9D2472E65";
long sValueAsInt = long.Parse(sValue, System.Globalization.NumberStyles.HexNumber);
//output {-8382343524677898651}
string sValueAsStringAgain = IntToBinaryString(sValueAsInt);
//output {10001011 10101011 11101110 11111001 11010010 01000111 00101110 01100101}
byte[] data = Encoding.BigEndianUnicode.GetBytes(sValue);
string decodedX = Encoding.BigEndianUnicode.GetString(data);
string retval = data.Aggregate("", (current, b) => current + b.ToString("X2"));
//output {0038004200410042004500450046003900440032003400370032004500360035}
char[] decodedX2 = Encoding.BigEndianUnicode.GetString(data).Reverse().ToArray();
StringBuilder retval2 = new StringBuilder(); //output {56E2742D9FEEBAB8}
foreach (var b in decodedX2)
retval2.Append(b);
Console.ReadLine();
}
}
}
對
和回合你的方法:
public static string bigToLittle(string data)
{
long sValueAsInt = long.Parse(data, System.Globalization.NumberStyles.HexNumber);
byte[] bytes = BitConverter.GetBytes(sValueAsInt);
string retval = "";
foreach (byte b in bytes)
retval += b.ToString("X2");
return retval; //output {652E47D2F9EEAB8B}
}
難道這意味着是一個64位的整數?不清楚爲什麼你想要返回一個字符串,而不是將它解析爲'long'或'ulong',如果是的話(把它轉換爲'int'肯定是一個壞方法,因爲你有64位的數據,而不是32 ...) –
爲了成功地將little endian轉換爲big endian(反之亦然),您需要知道每種數據類型的大小(以字節爲單位)。例如,它們是字節(然後你完成了),16位整數(交換兩個字節),32位整數(反向順序),64位等等。換句話說,那個十六進制字符串應該是一個數字,還是它的數組數組?這非常重要。 – MicroVirus
請說明給定字符串的預期輸出, – Heinzi