如何格式化可以转换为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
我认为现在它的格式可以理解:)
答案 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
,我把它称为中间值。让我知道确切的术语。