即使接受的答案符合这个问题,我认为它是不完整的,因为这个问题包含int和不在头中的短小,它在搜索结果中有误导性,并且正如我们所知,C#中的Int32具有32位因此4个字节。我将在这里发布一个在Int32使用情况下将会很有用的例子。在一个Int32的情况下,我们有:
- LowWordLowByte
- LowWordHighByte
- HighWordLowByte
- HighWordHighByte。
因此,我创建了以下方法将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
- FF。
如果它是很难理解我创建的方法,那么下面可能是一个更易于理解的一个:
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的insteand有可以是一个枚举指定字节,字,双字
- 而不是转换为十六进制字符串和创建小端字符串,你可以转换为字符,并做任何你想要的东西O操作。
希望这会帮助别人!
哦哇我是一个延迟,显然面具与0xff是我想要的,不知道为什么我写了8,猜测我在想8位。 – rolls 2011-03-24 13:44:19
'byte lower =(byte)number;'应该这样做 – 2013-07-17 13:31:36
@NikitaBrizhak:是的,但我觉得上面的方法比较简单:) – 2013-07-17 13:34:35