C#中的字节转整数

24

我正在从 SQL Server 表中读取一行数据,其中一个列的类型是 tinyint。

我想将此值获取到一个 int 或 int32 变量中。

rdr.GetByte(j)
(byte) rdr.GetValue(j)

看起来这似乎是唯一的检索值的方法。但是怎样将结果转化为 int 变量呢?

7个回答

27

int value = rdr.GetByte(j);

不需要进行显式转换,因为从 byteint 是一种扩展转换(没有数据丢失的可能性)。

注:保留了原文中的HTML标签。


1
这是一个将 byte 隐式转换为 int 的操作。 - abatishchev
3
我应该更具体说明。 这是我已经尝试过的。 我得到了一个“指定的强制转换无效”的异常。 我还尝试过以下方法:int value = (int) rdr.GetByte(j) 和 int value = Convert.ToInt(rdrGetByte(j)) - jtb
1
@jtb:在我看来,你似乎没有获取到带有索引 j 的 tinyint 列。异常堆栈是什么?错误一定发生在 GetByte 内部。 - Jordão
2
我同意@Jordao的说法;听起来列j不是一个byte。尝试使用int value = Convert.ToInt(rdr.GetValue(j)); - Stephen Cleary

15

请查看BitConverter.ToInt32文档(包含更多示例):

byte[] bytes = { 0, 0, 0, 25 };

// If the system architecture is little-endian (that is, little end first),
// reverse the byte array.
if (BitConverter.IsLittleEndian)
    Array.Reverse(bytes);

int i = BitConverter.ToInt32(bytes, 0);
Console.WriteLine("int: {0}", i);
// Output: int: 25

4
这个问题询问如何将单个字节(byte)转换为整数(int)。BitConverter用于处理字节数组(byte),而不是单个字节(byte)。 - Stephen Cleary

5

byte赋值给int是可以的:

int myInt = myByte;

但是,也许你在 IDataRecord.GetByte 内部遇到了异常,这种情况下,你应该检查你使用的索引是否真的指向了一个 tinyint 列。你可以检查从 GetValue 返回的类型。对于 tinyint 列,它应该是一个 byte

Trace.Assert(rdr.GetValue(j).GetType() == typeof(byte));

另一个选择是完全放弃脆弱的数字索引:
int myInt = rdr.GetByte(rdr.GetOrdinal(TheNameOfTheTinyintColumn))

3

我遇到了一个小问题,与编程有关。如果你有一个对象类型是 System.Byte 类型,你不能直接将其转换为 int。你必须先将其转换为 byte,然后再转换为 int。

public int Method(object myByte)
{
    // will throw a cast exception
    // var val = (int)myInt;

    // will not throw a cast exception
    var val = (int)((byte)myInt)
    return val;
}

Method((byte)1);

2
将字节转换为整数应该可以正常工作:
int myInt = (int) rdr.GetByte(j);

由于C#支持从byte到int的隐式转换,因此您可以选择这样做:
int myInt = rdr.GetByte(j);

你选择哪一个取决于个人喜好(是否想记录强制类型转换正在发生)。请注意,如果你想使用 type inference,或者否则 myInt 将具有错误的类型,则需要显式进行强制类型转换:
var myInt = (int) rdr.GetByte(j);

2
(int)rdr.GetByte(j)

0
这与Stephen Cleary在接受的答案中的评论类似,但我需要指定int的大小。以下代码对我有用:
int value = Convert.ToInt32(rdr.GetValue(j));

同时,它还提供了与使用 int 数据库列的向后兼容性。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接