【问题标题】:BitConverter return wrong bytes?BitConverter 返回错误的字节?
【发布时间】:2016-10-06 09:04:31
【问题描述】:

我正在尝试将值转换为字节数组。

例如,我有:

var b1 = BitConverter.GetBytes(0x85);
var b2 = BitConverter.GetBytes(12345);

b1 的值为:

{byte[4]}
    [0]: 133
    [1]: 0
    [2]: 0
    [3]: 0

b2:

{byte[4]}
    [0]: 57
    [1]: 48
    [2]: 0
    [3]: 0

为什么字节数组的大小总是4?是否可以返回正确的字节数(即不包括尾随的 0)?

【问题讨论】:

标签: c#


【解决方案1】:

四个字节 32 位整数的正确字节数。如果您希望将其截断为表示数字所需的最小字节数,您必须自己这样做。实际上,您正在寻找的应用程序很少。 BitConverter 用于获取某些原始类型的确切内存表示。对二进制文件格式或网络协议有帮助的东西。对于那些你通常希望得到相同长度的结果,这取决于你传入的类型。

旁注:您希望0 生成一个空数组吗? -1 呢?应该是new byte [] { 255 } 还是new byte [] { 255, 255, 255, 255 }

【讨论】:

  • @Damien_The_Unbeliever:授予,并编辑 :-) (我仍然认为固定长度的东西更常见,并且在它们的编写/解释方式上也有更少的可变性(记住一些Flash 中有关 AMF 的错误 ...))。
  • 为什么BitConverter.GetBytes((byte)0x85) 返回一个字节数组或 2 而不是 1?
  • @Ivan-MarkDebono - 因为没有接受单字节参数的GetBytes 的重载(你为什么需要一个 - 你希望它运行什么代码,除了返回它的输入?)
【解决方案2】:

您正在传递一个具有 32 位的 int。你可以传递一个short,你会得到 2 个字节:

var b1 = BitConverter.GetBytes((short)0x85);
var b2 = BitConverter.GetBytes((short)12345);

【讨论】:

  • 我有一种模糊的感觉,他们需要三个字节来表示适合三个字节的值,这就是这种方法不再适用的地方。
  • @Joey 哦,好吧,这确实可能是意图。我赞成你的答案更好,
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-07
相关资源
最近更新 更多