在c中转换little endian为big endian#
我想将字符串“8BABEEF9D2472E65”转换为big endian。在c中转换little endian为big endian#
我已经输入了这个函数,我收到UINT Size error ..我该怎么办?
功能:
string bigToLittle(string data)
{
int number = Convert.ToInt32(data, 16);
byte[] bytes = BitConverter.GetBytes(number);
string retval = "";
foreach (byte b in bytes)
retval += b.ToString("X2");
return retval;
}
我认为你可以使用System.Runtime.Remoting.Metadata.W3cXsd2001.SoapHexBinary
类。
string input = "8BABEEF9D2472E65";
var output = new SoapHexBinary(SoapHexBinary.Parse(input).Value.Reverse().ToArray())
.ToString();
输出:652E47D2F9EEAB8B
或可能
var output = IPAddress.HostToNetworkOrder(long.Parse(input, NumberStyles.HexNumber))
.ToString("X");
你可以使用较少的代码完成同样的操作:) long.Parse(input,System.Globalization.NumberStyles.HexNumber) –
@Taumantis你真的看过我的回答吗?我发布了~55分钟前,你的评论:) – Eser
是的,我做了,我知道'IPAddress.HostToNetworkOrder(long.Parse(input,NumberStyles.HexNumber)) .ToString(“X”);'也可以写因为只有'var output = long.Parse(输入,System.Globalization.NumberStyles.HexNumber)'。 Sorrry指出它,我只是没有看到'IPAddress.HostToNetworkOrder'的原因,但也许你可以用一些理论支持它,因为我们的提问者创建了这样一个充满特定信息的问题:PI试图在行之间读取,但.. ..也许你还带别的东西来? :) –
我们无法猜测你想要的输出我让自己写丢失的可能性(代码中的注释)什么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