长整型数转换为24位二进制表示的字节数组

kingofpopisnn 2011-06-16 09:25:29
/// </summary>
/// <param name="x">要转换的长整型数,这个数的大小不会超过2的24次方</param>
/// <returns>二进制表示的字节数组</returns>
private byte[] ConvertToBinaryArray(long x)
{
byte[] binaryArray = new byte[24];
for (int i = 0; i != 23; i++)
{
binaryArray[23 - i] = (byte)(x & 1);
x = x >> 1;
}
return binaryArray;
}
请教代码~~~
...全文
185 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
kingofpopisnn 2011-06-16
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 kingofpopisnn 的回复:]
引用 12 楼 vrhero 的回复:
1.long是64位,既然不超过24位,根本就不该用long...

2.Windows是little endian,直接取前3byte就是24位...

3.小心负数...

lz该补补基础课...

C# code

return BitConverter.GetBytes(x).Take(3).ToArray();[/Quote] 那用INT型也可以么
kingofpopisnn 2011-06-16
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 vrhero 的回复:]
1.long是64位,既然不超过24位,根本就不该用long...

2.Windows是little endian,直接取前3byte就是24位...

3.小心负数...

lz该补补基础课...

C# code

return BitConverter.GetBytes(x).Take(3).ToArray();
[/Quote]谢谢 菜鸟 刚开始么~~~
vrhero 2011-06-16
  • 打赏
  • 举报
回复
1.long是64位,既然不超过24位,根本就不该用long...

2.Windows是little endian,直接取前3byte就是24位...

3.小心负数...

lz该补补基础课...
return BitConverter.GetBytes(x).Take(3).ToArray();
kingofpopisnn 2011-06-16
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 lihanbing 的回复:]
引用 9 楼 kingofpopisnn 的回复:
我总觉得i可以等于23吧~~~


你说得对
[/Quote]
那可以改成i<24或者i<=23 应该对结果没影响吧~~~
lihanbing 2011-06-16
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 kingofpopisnn 的回复:]
我总觉得i可以等于23吧~~~
[/Quote]

你说得对
kingofpopisnn 2011-06-16
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 kingofpopisnn 的回复:]
引用 7 楼 lihanbing 的回复:
引用 6 楼 kingofpopisnn 的回复:

binaryArray[23 - i] = (byte)(x &amp; 1);
x = x >> 1;
这点什么意思啊 ?谢谢了

把x前24位中的每一位,单独存到一个字节中

谢谢啊 这下懂了 真的感谢~~~
[/Quote]我总觉得i可以等于23吧~~~
kingofpopisnn 2011-06-16
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 lihanbing 的回复:]
引用 6 楼 kingofpopisnn 的回复:

binaryArray[23 - i] = (byte)(x & 1);
x = x >> 1;
这点什么意思啊 ?谢谢了

把x前24位中的每一位,单独存到一个字节中
[/Quote]
谢谢啊 这下懂了 真的感谢~~~
lihanbing 2011-06-16
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 kingofpopisnn 的回复:]

binaryArray[23 - i] = (byte)(x & 1);
x = x >> 1;
这点什么意思啊 ?谢谢了
[/Quote]
把x前24位中的每一位,单独存到一个字节中
kingofpopisnn 2011-06-16
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lihanbing 的回复:]
long l=12345;
byte[] b = BitConverter.GetBytes(l);

这样是4 byte 32位 你要24位的话 取 b[0]~b[2] 即可
[/Quote]
binaryArray[23 - i] = (byte)(x & 1);
x = x >> 1;
这点什么意思啊 ?谢谢了
lihanbing 2011-06-16
  • 打赏
  • 举报
回复
long l=12345;
byte[] b = BitConverter.GetBytes(l);

这样是4 byte 32位 你要24位的话 取 b[0]~b[2] 即可
kingofpopisnn 2011-06-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 caozhy 的回复:]
24byte?
24bit就足够了。

一个32位数,也只需要4byte。
[/Quote]
具体请教一下 菜鸟没办法~~~
kingofpopisnn 2011-06-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lihanbing 的回复:]
一般24位3字节就够了,如果你就是要24字节表示法的话,代码好像没啥问题
[/Quote]
private byte[] ConvertToBinaryArray(long x)
byte[] binaryArray = new byte[24];
for (int i = 0; i != 23; i++)
{
binaryArray[23 - i] = (byte)(x & 1);
x = x >> 1;
}
return binaryArray;
具体讲讲吧 我是新手 只能看个大概~~~
threenewbee 2011-06-16
  • 打赏
  • 举报
回复
24byte?
24bit就足够了。

一个32位数,也只需要4byte。
lihanbing 2011-06-16
  • 打赏
  • 举报
回复
一般24位3字节就够了,如果你就是要24字节表示法的话,代码好像没啥问题
在工程实践中经常需要实现上下机间的串口通信,为了编程的方便性我们通常采用字符方式进行据传输,由于需要转换以及转换后的度增加,据传输速度不够理想,为了提高系统实时性在某些特殊场合更需要直接采用二进制进行据传输。Delphi6.0是一种面向对象的可视化的快速应用开发(RAD)工具,它既具有C++语言的强大功能,同时又有VB的易用性,Delphi6.0的伸缩性强,既可用于开发小项目,也可用于开发大项目,尤其适用于快速应用的开发,其大量优点使它迅速成为一种非常流行的编程语言。Delphi6.0中串口通信的实现方法很多,可以使用嵌入式汇编语言、API函以及VB的MSComm控件来实现。其中使用MSComm控件来实现串口通信最方便,但有关Delphi如何实现二进制通信的资料很少,大部分参考书都只介绍了VB中MSComm控件的字符通信方式。由于Delphi中跟Variant变量不兼容,即在Delphi中字节不能直接赋值给MSComm控件的output属性,这跟VB有中很大的不同(VB中可以直接赋值),本人通过摸索总结出两种实现Delphi二进制通信的方法,即动态法和可变(Variant Array)法,并给出了应用实例。在应用实例中我们使用Delphi的absolute关键字来定义两个同地址的动态,类型分别为字节和短整型,使用字节动态接收据后,可以直接使用短整型动态获得短整型据,省却了转换的麻烦

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧