我有2个字节:
byte b1 = 0x5a;
byte b2 = 0x25;
Run Code Online (Sandbox Code Playgroud)
我怎么得到0x5a25?
Eli*_*sha 36
它可以使用按位运算符'<<'和'|'来完成
public int Combine(byte b1, byte b2)
{
int combined = b1 << 8 | b2;
return combined;
}
Run Code Online (Sandbox Code Playgroud)
用法示例:
[Test]
public void Test()
{
byte b1 = 0x5a;
byte b2 = 0x25;
var combine = Combine(b1, b2);
Assert.That(combine, Is.EqualTo(0x5a25));
}
Run Code Online (Sandbox Code Playgroud)
一个更明确的解决方案(也可能更容易理解并扩展到byte到int ie):
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Explicit)]
struct Byte2Short {
[FieldOffset(0)]
public byte lowerByte;
[FieldOffset(1)]
public byte higherByte;
[FieldOffset(0)]
public short Short;
}
Run Code Online (Sandbox Code Playgroud)
用法:
var result = (new Byte2Short(){lowerByte = b1, higherByte = b2}).Short;
Run Code Online (Sandbox Code Playgroud)
这让编译器可以完成所有的bit-fiddling,因为Byte2Short是一个struct而不是一个类,所以new甚至不会分配一个新的堆对象;)
最简单的是
b1*256 + b2
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
26216 次 |
| 最近记录: |