How do I concatenate 2 bytes?

前端 未结 6 1801
萌比男神i
萌比男神i 2021-02-08 02:18

I have 2 bytes:

byte b1 = 0x5a;  
byte b2 = 0x25;

How do I get 0x5a25 ?

相关标签:
6条回答
  • 2021-02-08 02:30

    The simplest would be

    b1*256 + b2
    
    0 讨论(0)
  • 2021-02-08 02:31

    A more explicit solution (also one that might be easier to understand and extend to byte to int i.e.):

    using System.Runtime.InteropServices;
    [StructLayout(LayoutKind.Explicit)]
    struct Byte2Short {
      [FieldOffset(0)]
      public byte lowerByte;
      [FieldOffset(1)]
      public byte higherByte;
      [FieldOffset(0)]
      public short Short;
    }
    

    Usage:

    var result = (new Byte2Short(){lowerByte = b1, higherByte = b2}).Short;
    

    This lets the compiler do all the bit-fiddling and since Byte2Short is a struct, not a class, the new does not even allocate a new heap object ;)

    0 讨论(0)
  • 2021-02-08 02:36

    It can be done using bitwise operators '<<' and '|'

    public int Combine(byte b1, byte b2)
    {
        int combined = b1 << 8 | b2;
        return combined;
    }
    

    Usage example:

    [Test]
    public void Test()
    {
        byte b1 = 0x5a;
        byte b2 = 0x25;
        var combine = Combine(b1, b2);
        Assert.That(combine, Is.EqualTo(0x5a25));
    }
    
    0 讨论(0)
  • 2021-02-08 02:38

    The question is a little ambiguous.

    If a byte array you could simply: byte[] myarray = new byte[2]; myarray[0] = b1; myarray[1] = b2; and you could serialize the byearray...

    or if you're attempting to do something like stuffing these 16 bits into a int or similar you could learn your bitwise operators in c#... http://en.wikipedia.org/wiki/Bitwise_operation#Bit_shifts

    do something similar to:

    byte b1 = 0x5a; byte b2 = 0x25; int foo = ((int) b1 << 8) + (int) b2;

    now your int foo = 0x00005a25.

    0 讨论(0)
  • 2021-02-08 02:45

    Using bit operators: (b1 << 8) | b2 or just as effective (b1 << 8) + b2

    0 讨论(0)
  • 2021-02-08 02:47
    byte b1 = 0x5a;
    byte b2 = 0x25;
    
    Int16 x=0;
    
    x= b1;
    x= x << 8;
    x +=b2;
    
    0 讨论(0)
提交回复
热议问题