【问题标题】:Converting Byte[] to a Int8将 Byte[] 转换为 Int8
【发布时间】:2016-11-04 16:48:19
【问题描述】:

有没有办法将 Byte[] 转换为 int8?我得到了一个包含测试输入参数列表的二进制文件。参数的大小从 uint32 到 uint8 不等。我在文件中读取没有问题,棘手的是让值显示在 GUI 中。

这是我正在做的事情的基础:

private Byte[] blockSize;
private Byte[] binSize;

FileStream filen = File.OpenRead(file);
BinaryReader br = new BinaryReader(filen);

blockSize = br.ReadBytes(4);
binSize = br.ReadBytes(1);

考虑到参数文件的前 32 位(4 字节)是 blockSize,接下来的 8 位(1 字节)是我的 binSize 变量的值,这没有问题。问题出在显示它。

textBox1.Text = BitConverter.ToInt32(blockSize, 0).ToString();
textBox2.Text = BitConverter.ToString(binSize, 0).ToString();

假设我的二进制输入文件包含以下 5 个字节的数据“0A 00 00 00 0A”。我的第一个文本框显示'10',我的第二个文本框显示'0A'。我希望将十六进制值转换为更易于理解的十进制值。只要输入文件中的参数大于 1 字节,它似乎就可以正常工作,因此我可以使用 ToInt16 或 ToInt32 轻松转换它,但我没有 8 位的品种。

【问题讨论】:

  • 这怎么可能? Byte[] 转换成 int8?
  • int8 是什么意思?没有这样的事情。
  • int8=字节。字节[] 成字节?天哪。
  • @viveknuna,如果字节数组只有一个元素是可能的:)

标签: c#


【解决方案1】:

你的问题是r.ReadBytes(1); 返回byte[] 然后你用字节数组作为参数调用BitConverter.ToString(bytearray) 来执行下一步:

转换指定数组的每个元素的数值 字节到其等效的十六进制字符串表示

BinaryReader 有方法

int ReadInt32()
byte ReadByte()

blockSize 的类型更改为int,将binSize 的类型更改为byte 并使用这些方法

int blockSize = br.ReadInt32();
byte binSize = br.ReadByte();

textBox1.Text = blockSize.ToString();
textBox2.Text = binSize.ToString();

来自 MSDN:
ReadInt32()

从当前流中读取一个 4 字节的有符号整数并推进 流的当前位置四个字节。

ReadByte()

从当前流中读取下一个字节并推进当前 流的位置一个字节。

【讨论】:

  • 好的,我的问题是我使用的是 ReadBytes(1) 而不是 ReadByte()。当我尝试将 ReadBytes(1) 存储为字节时出现错误,但在使用 ReadByte 时它可以工作。感谢您的帮助。
猜你喜欢
  • 2011-06-08
  • 2021-12-17
  • 1970-01-01
  • 2014-07-21
  • 1970-01-01
  • 2015-02-12
  • 1970-01-01
  • 1970-01-01
  • 2018-10-21
相关资源
最近更新 更多