【问题标题】:How to Split a byte into 2 parts and read it? [duplicate]如何将一个字节分成两部分并读取它? [复制]
【发布时间】:2019-08-03 15:08:21
【问题描述】:

我在给我的任务中遇到了这个问题。 情况如下:

如果用户点击“Vat First”,则值为 0。 否则,值为 1。

那么,在这个文本框中,

允许的取值范围是 0 到 15。

然后示例值是这样保存的:

"01" = 因为它首先是缸和 1mm Z 轴向上高度。

“11” = 平台优先,Z 轴向上 1mm

“015” = 先瓮,15mm

“115” = 平台优先,15mm

之所以这样保存,是因为是给我的文件协议,我也无能为力。它说该值为 1 字节值的“平台移动顺序和 Z 轴向上高度”。

我现在的问题是之后读取结果以将其重新加载到应用程序。我怎么知道它是否只使用 3 位或 2 位数字,因为 int 的返回忽略了开头的 0。 "015" = "15" 所以我的应用程序可能会将其视为平台优先,5 毫米,而不是增值税优先,15 毫米。

编辑:所以我刚刚意识到感谢@BenVoigt,它被保存到一个字节中并且它有 8 位。根据给我的协议,前 4 位是移动顺序(0 或 1),其余的是 Z 轴向上高度(0-15)。对于真正的问题,我如何将字节分成 4 位并获取值?

【问题讨论】:

  • 为什么????你不能只做 JSON 或至少像 0,15 这样的逗号分隔列表吗?
  • 噢。我忘了告诉你这是给我的文件协议。我对此无能为力@AlexeiLevenkov
  • 但它是text文件协议?那么如何让“015”和“15”字符串相同呢?
  • @TerribleDog 你的意思是当他们从文本流中读取非整数值时,一些#$@# 制作了PlatformVatMovingOrder 类型为int ? (旁注请重新阅读minimal reproducible example 指导 - 很难看出您的情况到底发生了什么)
  • 如果没有所有的业务逻辑,这个问题可能会受益匪浅,非常难以理解

标签: c# winforms integer


【解决方案1】:

你不能只制作两个结果字符串并将它们附加在一起以获得结果吗?看来整数类型是你的问题。

【讨论】:

  • 不,他的问题是没有在文件协议文档中显示真正的定义。显然(来自 cmets)每个项目有 4 位,不重叠,没问题。
【解决方案2】:

前 4 位为移动顺序(0 或 1),其余为 Z 轴向上高度 (0-15)。

这是一个简单的位移任务。

Order = Combined >> 4;
Height = Combined & 0x0F;

还有保存:

Combined = (Order << 4) | Height;

&lt;&lt;&gt;&gt; 是位移运算符。

【讨论】:

  • 如果你只是进行位移:) - Height = ((byte)(Combined &lt;&lt; 4)) &gt;&gt;4;(但这一切都已经回答了很多次了)......
猜你喜欢
  • 1970-01-01
  • 2021-05-24
  • 2016-03-30
  • 1970-01-01
  • 2014-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多