即使接受的答案符合问题,我也认为它不完整,因为问题包含 int 并且标题中不短并且它在搜索结果中具有误导性,并且我们知道 C# 中的 Int32 有 32 位,因此有 4 个字节. 我将在此处发布一个示例,该示例在使用 Int32 的情况下很有用。在 Int32 的情况下,我们有:
- 低字低字节
- 低字高字节
- 高字低字节
- 高字高字节。
因此,我创建了以下方法,用于将 Int32 值转换为小端十六进制字符串,其中每个字节由空格分隔。当您传输数据并希望接收器更快地进行处理时,这很有用,他可以只拆分(“”)并将字节表示为独立的十六进制字符串。
public static String IntToLittleEndianWhitespacedHexString(int pValue, uint pSize)
{
String result = String.Empty;
pSize = pSize < 4 ? pSize : 4;
byte tmpByte = 0x00;
for (int i = 0; i < pSize; i++)
{
tmpByte = (byte)((pValue >> i * 8) & 0xFF);
result += tmpByte.ToString("X2") + " ";
}
return result.TrimEnd(' ');
}
用法:
String value1 = ByteArrayUtils.IntToLittleEndianWhitespacedHexString(0x927C, 4);
String value2 = ByteArrayUtils.IntToLittleEndianWhitespacedHexString(0x3FFFF, 4);
String value3 = ByteArrayUtils.IntToLittleEndianWhitespacedHexString(0x927C, 2);
String value4 = ByteArrayUtils.IntToLittleEndianWhitespacedHexString(0x3FFFF, 1);
结果是:
- 7C 92 00 00
- FF FF 03 00
- 7C 92
- 法郎。
如果我创建的方法很难理解,那么下面的方法可能更容易理解:
public static String IntToLittleEndianWhitespacedHexString(int pValue)
{
String result = String.Empty;
byte lowWordLowByte = (byte)(pValue & 0xFF);
byte lowWordHighByte = (byte)((pValue >> 8) & 0xFF);
byte highWordLowByte = (byte)((pValue >> 16) & 0xFF);
byte highWordHighByte = (byte)((pValue >> 24) & 0xFF);
result = lowWordLowByte.ToString("X2") + " " +
lowWordHighByte.ToString("X2") + " " +
highWordLowByte.ToString("X2") + " " +
highWordHighByte.ToString("X2");
return result;
}
评论:
- 当然,除了 uint pSize 之外,还可以有一个枚举来指定 Byte、Word、DoubleWord
- 您可以转换为字符并做任何您想做的事情,而不是转换为十六进制字符串并创建小端字符串。
希望这会对某人有所帮助!