【问题标题】:Byte[] to int[] without trimming 0x00Byte[] 到 int[] 不修剪 0x00
【发布时间】:2015-04-17 11:26:05
【问题描述】:

我有一个包含如下值的字节数组: byte[] data={0x04,0x00};

我需要将其转换为字符串并将其打印为 str_data=0x400

但是当我将其转换为字符串时,数据打印为 40,其中最后一个 0x00 被视为仅 0。

我是 C# 新手,我正在努力解决这个问题。请帮忙。

【问题讨论】:

  • 你能展示你用来将其转换为字符串的代码吗?
  • 你想要的实际类型有点不清楚。标题说 int[] 所需的变量名似乎是字符串但包含一个 int...请更新问题描述
  • BitConverter.ToInt16() 这样做。或者一个 MemoryStream 来存储字节和 BinaryReader 来转换。打印时如何格式化值是分开的,使用 X 格式说明符生成十六进制字符串。
  • 最初我尝试使用此代码将字节数组转换为 int 数组,然后将其打印为字符串 int[] intArray = new int[0]; byte[] byteArray = new byte[0]; intArray = byteArray.Select(x => (int)x).ToArray(); ApplicationLogger.WriteMsg("Print : " + intArray.ToString());

标签: c# arrays string byte


【解决方案1】:

您的问题有点不清楚,但我认为您想要的是 X2 字节格式说明符,它将您的字节打印为两个十六进制数字,例如:

byte b = 0x40;
Console.WriteLine( b.ToString( "X2" ) ); // Prints '40'

将每个字节转换为字符串(使用例如 LINQ 的 Select 方法),然后加入它们并添加“0x”前缀。

【讨论】:

  • ...除了第一个字节,您似乎只需要 x 而不是 x2;或者之后摆脱(可能的)前导零......
  • 我在这里得到了答案:stackoverflow.com/questions/311165/…
  • 感谢您的回答。我使用了以下 sn-p StringBuilder hex = new StringBuilder(byteArray.Length * 2); foreach (byte b in byteArray) hex.AppendFormat("{0:x2}", b);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-30
  • 1970-01-01
相关资源
最近更新 更多