【问题标题】:How to convert from Int64 to hex and from hex to byte in c#如何在 c# 中从 Int64 转换为十六进制以及从十六进制转换为字节
【发布时间】:2015-07-12 09:57:34
【问题描述】:

我正在尝试通过串行端口向微控制器发送一个字节数组。这是一个可以与微控制器成功通信的示例数组:

byte[] getCommandArray = new byte[7] { 0x02, 0x0D, 0x01, 0x03, 0x30, 0x44, 0x03 };

我需要做的是从数据库中读取不同的值,将它们存储在一个字节数组中,将此数组发送到串行端口。我从数据库中读取值Int64。此外,为了成功通信,我需要将这些值转换为十六进制。例如,如果我从数据库中读取 13,我需要将其作为 0x0D 写入我的数组。我可以将 13 转换为 0x0D 作为十六进制字符串,但我无法将其转换为 byte。如果您有除此逻辑之外的任何其他建议,我将不胜感激。

【问题讨论】:

  • 检查是否有帮助:stackoverflow.com/questions/311165/…
  • 我已经检查了这些链接,但我需要将我的值存储为一个字节而不是字节数组。就像我说的,我需要将 13 转换为 0x0D 并将 0x0D 存储在我的字节数组中。
  • @vontarro,你为什么要显示一个包含 7 个字节的字节数组,而不是你从 Int64 得到的 8 个字节?
  • @Alex 都是不同的值。我不确定这是否可能,但我需要将数字 13 作为 0x0D 存储在我的字节数组中。所以只有数组的第二个数字应该将 13 表示为 0x0D

标签: c# hex type-conversion byte int64


【解决方案1】:

如果您只是想从您的 Int64 值中获取所有字节,您可以这样做:

Int64 myValueFromDB = 13;
var asBytes = BitConverter.GetBytes(myValueFromDB);

要检查这是否产生了您所期望的结果,您可以像这样打印这个结果:

Console.WriteLine("{{{0}}}", string.Join(",", asBytes.Select(x => "0x" + x.ToString("X2"))));    

对于您的示例,使用 myValueFromDB 的值 13,输出为:

{0x0D,0x00,0x00,0x00,0x00,0x00,0x00,0x00}

可以看到asBytes[0]的值为0x0D,其他7个字节为0。

您可以在Fiddle 中亲自检查;

【讨论】:

  • 你知道为什么它在我的电脑上产生 0x37 而不是 0x0D 吗?
  • 如果您在 empty 项目中运行 完全相同的代码,是否会生成一个所有值均为 0x37 的数组?
  • 它现在完美运行,我不知道为什么它会产生 0x37。非常感谢!
猜你喜欢
  • 2019-06-10
  • 1970-01-01
  • 2018-11-18
  • 2014-12-31
  • 1970-01-01
  • 1970-01-01
  • 2017-08-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多