gpt4 book ai didi

c# - 将文件中的十六进制添加到 List

转载 作者:太空狗 更新时间:2023-10-29 22:15:57 26 4
gpt4 key购买 nike

我正在尝试制作 List<byte>来自包含字符串 (Hexadecimal) 的文件。定义是:

List<byte> myArray = new List<byte>();

如果我想直接添加我的信息,我会使用这样的东西:

  myArray.Add(0xb8);

注意:没有任何引号或双引号。

问题是当我想从文件做同样的事情时!现在我想知道什么0xb8的类型是所以我使用下面的代码:

0xc3.GetType().ToString()

结果是:System.Int32 !!!!

但是当我从文件中读取字符串并使用这样的代码时,会出现以下错误。

代码:

 Line = "0xb8";
myArray.Add(Convert.ToInt32(Line));

错误:

Argument 1: cannot convert from 'int' to 'byte'

很明显。因为 myArray 的唯一重载只得到一个 byte作为争论者。让事情对我来说如此复杂的原因是为什么当我添加 Int32 时它没有给我任何错误至 myArraymyArray.Add(0xb8); .

我觉得应该是 byte 的一种形式吧!也许吧!

为什么它不给出任何错误以及如何完成这种情况(我的意思是将字节从字符串添加到 myArray )?

最佳答案

这个有效:

var list = new List<byte>();

byte byteValue = 0xb8;
list.Add(byteValue);

这不是(“无法从‘int’转换为‘byte’”):

var list = new List<byte>();

int byteValue = 0xb8;
list.Add(byteValue);

然而在这两种情况下0xb8被识别为 System.Int32 .那么为什么编译器允许隐式转换 intbyte在第一个例子中?

请参阅 C# 规范 6.1.9 隐式常量表达式转换:

A constant-expression (§7.19 [including literals]) of type int can be converted to type sbyte, byte, short, ushort, uint, or ulong, provided the value of the constant-expression is within the range of the destination type.

这是存在的,因为所有整数文字都是 (u)int(u)long ,如 2.4.4.2 整数文字中所述。

给定0 <= 0xb8 <= 255 ,编译器允许隐式转换。

在你的情况下,由于原因explained by @usr ,您需要进行显式转换:

myArray.Add((byte)Convert.ToInt32(Line, 16));

关于c# - 将文件中的十六进制添加到 List<byte>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30865184/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com