字节转换的数字形成

时间:2009-05-29 07:51:46

标签: c#

如何格式化可以转换为Byte [](数组)的数字;

我知道如何将结果值转换为byte [],但问题是如何格式化中间数。

这是数据,

  int packet = 10;
  int value = 20;
  long data = 02; // This will take 3 bytes [Last 3 Bytes]

我需要长值,通过我可以移动,我将像这样填充字节数组

Byte[0] = 10;
Byte[1] = 20;
Byte[2] = 00;
Byte[3] = 00;
Byte[4] = 02;

字节2,3,4是数据

但格式化中间值是问题所在。如何形成这个

以下是样本

长数据= 683990319104; ///我把它称为中间值。

这是我从内置应用程序收到的号码。

 Byte[] by = new byte[5];

            for (int i = 0; i < 5; i++)
            {
                by[i] = (byte)(data & 0xFF);

                data>>= 8; 
            }


  Here 

 Byte[0] = 00;
 Byte[1] = 00;    //Byte 0,1,2  are Data  (ie data = 0)
 Byte[2] = 00;

 Byte[3] = 65;   //Byte 3 is value  (ie Value = 65)
 Byte[4] = 159;  // Byte 4 is packet (is Packet = 159);

这是一个样本。

目前BitConverter.GetBytes(..)是接收的。

发送时的字节,参数很长。

所以我希望格式从

生成数字683990319104
packet = 159
value = 65
data = 0

我认为现在它的格式可以理解:)

3 个答案:

答案 0 :(得分:2)

不完全确定您的确切要求,但我认为您正在寻找BitConverter.GetBytes(数据)。

答案 1 :(得分:1)

使用3个字节来定义long看起来很不寻常;如果它只是3个字节...为什么很长?为什么不是一个int?

例如(注意我必须根据您的示例对您的字节修剪做出假设 - 您将没有完整的int / long范围...):

static void Main() {
    int packet = 10;
    int value = 20;
    long data = 02;

    byte[] buffer = new byte[5];
    WritePacket(buffer, 0, packet, value, data);
    for (int i = 0; i < buffer.Length; i++)
    {
        Console.Write(buffer[i].ToString("x2"));
    }
    Console.WriteLine();
    ReadPacket(buffer, 0, out packet, out value, out data);
    Console.WriteLine(packet);
    Console.WriteLine(value);
    Console.WriteLine(data);
}
static void WritePacket(byte[] buffer, int offset, int packet,
    int value, long data)
{
    // note I'm trimming as per the original question
    buffer[offset++] = (byte)packet;
    buffer[offset++] = (byte)value;

    int tmp = (int)(data); // more efficient to work with int, and
                           //  we're going to lose the MSB anyway...
    buffer[offset++] = (byte)(tmp>>2);
    buffer[offset++] = (byte)(tmp>>1);
    buffer[offset] = (byte)(tmp);
}
static void ReadPacket(byte[] buffer, int offset, out int packet,
     out int value, out long data)
{
    // note I'm trimming as per the original question
    packet = buffer[offset++];
    value = buffer[offset++];
    data = ((int)buffer[offset++] << 2)
        | ((int)buffer[offset++] << 1)
        | (int)buffer[offset];
}

答案 2 :(得分:0)

哦,

Its simple




    int packet = 159
    int value = 65
    int data = 0


    long address = packet;

    address = address<<8;
    address = address|value;
    address = address<<24;
    address = address|data;

现在地址的值是683990319104,我把它称为中间值。让我知道确切的术语。