【问题标题】:Converting a number larger than 255 into a byte variable将大于 255 的数字转换为字节变量
【发布时间】:2011-05-18 06:21:41
【问题描述】:

我了解字节和声明变量以节省处理空间的概念。我知道一个字节可以存储的最大值是255。

我似乎无法解决当前的问题,希望有人能够教育我并帮助我解决这个问题。我在处理字节操作方面没有太多经验。

我得到了一个要更新的项目,并被告知将数据传递给我的项目的服务将开始使用 2 个字节来传输 ID,而不是之前的 1 个字节,因为它们的参数已经增长。

变量的当前声明是:

Dim bytvariable As Byte = 0

接受 2 字节值的新声明是什么?

其次,我怎样才能将 2 字节的值转换为整数?

例如,他们向我传递了这个值:0x138,它应该是 312。

提前谢谢你。

【问题讨论】:

    标签: vb.net arrays byte


    【解决方案1】:

    .NET 中“原始”数据类型的Here's a summary 及其大小。

    是的,Int16 可能就是您想要的。

    您通常会从流中读取二进制数据,或者从字节数组中获取它。 要将这些源转换为 Int16,您可以这样做:

    在 C# 中:

    byte[] block = new byte[128];
    mystream.Read(block, 0, block.Length);
    int i = 0;
    Int16 value = (Int16)(block[i++] + block[i++] * 256);
    

    在 VB.NET 中,它是:

    Dim block as New Byte(128)
    stream.Read(block, 0, block.Length)
    Dim i as Int16 = 0
    Dim value As Short = CShort((block(i) + (buffer(i+1) * &H100)))
    i = i + 2
    

    (我认为)

    【讨论】:

    • 是的,看起来 Short (Int16 - 2 bytes) 应该代替我上面的手动方法来解决问题(除非它们需要传递 2 个字节进行连接)
    • 感谢您的链接,但我了解大小限制和价值限制。它并没有完全回答我的问题。我是否应该将其声明为短值并使用某种转换?
    • 感谢您的信息,现在我只需要测试一下:)
    【解决方案2】:

    从我的脑海中,我建议如果你坚持这样做(而不是只传递一个整数),你可以使用一个字节数组,第一个索引保存第一个数字,第二个索引第二个前任。字节[0] = 123,字节[1] = 255;

    然后将它们组合成一个字符串 ex。 string concatenatedNumber = byte[0].ToString() + byte[1].ToString();然后解析它。 int ID = Int32.Parse(concatenatedNumber);

    示例在 C# 中,但我认为您应该明白这一点。不过,我肯定宁愿将它作为整数传递。

    【讨论】:

    • 就我个人而言,Int16 要容易得多,但这不是我的决定。我正在与这个项目的第 3 方合作,这就是他们向我提供信息的方式。
    【解决方案3】:

    你可以试试这个:

    Dim bytvariable As Byte(0 To 1)
    
    bytvariable(0) = ' Get the first byte however they are sending it
    bytvariable(1) = ' Get the second byte however they are sending it
    Dim value As Int16 = BitConverter.ToInt16(buffer, 0);
    

    【讨论】:

      猜你喜欢
      • 2014-10-25
      • 2013-11-17
      • 1970-01-01
      • 2019-04-01
      • 1970-01-01
      • 2013-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多