int与byte、byte[]相互转换

本文深入探讨Java中int与byte类型的相互转换,包括直接转换、无符号转换及数组转换的多种方法,适合Java开发者掌握核心数据类型转换技巧。
该文章已生成可运行项目,

一、int to byte

范围在 -128 ~ 127之间可以直接转换,超出这个范围就乱了。

int i = 127;
byte b = (byte) i;
Integer i = 127;
i.byteValue();

二、byte to int

// byte to int (int仍有正负)
static int byte2Int(byte byt){
    // 直接强转
    return (int) byt;

}
// byte to int (int无符号)
static int byte2UnsignedInt(byte byt){
    /* 与强转的区别:强转之后表示数值不变(不论正数、0、负数),如-120强转后还是-120,
    ************* 但是这种方式强转之后,正数和0也不变,但是负数会变成:输入值+2<sup>8</sup>,如 -120 转换后变为136,即-120+256
    */
    return Byte.toUnsignedInt(byt);
    //return ((int) byt) & 0xFF; // Byte.toUnsignedInt(byt)就是这样实现的
}

三、int to byte[]

方式一

低位在前高位在后
/**  
    * 将int数值转换为占四个字节的byte数组,本方法适用于(低位在前,高位在后)的顺序。 和bytesToInt()配套使用 
    * @param value  
    *            要转换的int值 
    * @return byte数组 
    */    
public static byte[] intToBytes( int value )   
{   
    byte[] src = new byte[4];  
    src[3] =  (byte) ((value>>24) & 0xFF);  
    src[2] =  (byte) ((value>>16) & 0xFF);  
    src[1] =  (byte) ((value>>8) & 0xFF);    
    src[0] =  (byte) (value & 0xFF);                  
    return src;   
}  
高位在前低位在后
 /**  
    * 将int数值转换为占四个字节的byte数组,本方法适用于(高位在前,低位在后)的顺序。  和bytesToInt2()配套使用 
    */    
public static byte[] intToBytes2(int value)   
{   
    byte[] src = new byte[4];  
    src[0] = (byte) ((value>>24) & 0xFF);  
    src[1] = (byte) ((value>>16)& 0xFF);  
    src[2] = (byte) ((value>>8)&0xFF);    
    src[3] = (byte) (value & 0xFF);       
    return src;  
}  

方式二

低位在前高位在后
/**  
    * 将int数值转换为占四个字节的byte数组,本方法适用于(低位在前,高位在后)的顺序。  
    * @param value  
    *            要转换的int值 
    * @return byte数组 
    */    
public static byte[] intToBytes(int value)   
{   
    byte[] byte_src = new byte[4];  
    byte_src[3] = (byte) ((value & 0xFF000000)>>24);  
    byte_src[2] = (byte) ((value & 0x00FF0000)>>16);  
    byte_src[1] = (byte) ((value & 0x0000FF00)>>8);    
    byte_src[0] = (byte) ((value & 0x000000FF));          
    return byte_src;  
}  

三、byte[] to int

方式一

低位在前高位在后
/**  
    * byte数组中取int数值,本方法适用于(低位在前,高位在后)的顺序,和和intToBytes()配套使用 
    *   
    * @param src  
    *            byte数组  
    * @param offset  
    *            从数组的第offset位开始  
    * @return int数值  
    */    
public static int bytesToInt(byte[] src, int offset) {  
    int value;    
    value = (int) ((src[offset] & 0xFF)   
            | ((src[offset+1] & 0xFF)<<8)   
            | ((src[offset+2] & 0xFF)<<16)   
            | ((src[offset+3] & 0xFF)<<24));  
    return value;  
}  
高位在前低位在后
/**  
    * byte数组中取int数值,本方法适用于(低位在后,高位在前)的顺序。和intToBytes2()配套使用 
    */  
public static int bytesToInt2(byte[] src, int offset) {  
    int value;    
    value = (int) ( ((src[offset] & 0xFF)<<24)  
            |((src[offset+1] & 0xFF)<<16)  
            |((src[offset+2] & 0xFF)<<8)  
            |(src[offset+3] & 0xFF));  
    return value;  
}  

方式二

低位在前高位在后
 /**  
    * byte数组中取int数值,本方法适用于(低位在前,高位在后)的顺序。 
    *   
    * @param ary  
    *            byte数组  
    * @param offset  
    *            从数组的第offset位开始  
    * @return int数值  
    */    
public static int bytesToInt(byte[] ary, int offset) {  
    int value;    
    value = (int) ((ary[offset]&0xFF)   
            | ((ary[offset+1]<<8) & 0xFF00)  
            | ((ary[offset+2]<<16)& 0xFF0000)   
            | ((ary[offset+3]<<24) & 0xFF000000));  
    return value;  
}  

参考:
byte与int强制转换
【转】java中byte, int的转换, byte String转换
byte[]数组和int之间的转换

本文章已经生成可运行项目
### 使用 `Convert.ToInt32(byte)` 方法 C# 中的 `Convert.ToInt32(byte)` 方法用于将字节值转换为其等效的 32 位有符号整数。由于 `byte` 是无符号的 8 位类型,其取值范围为 0 到 255,因此此方法可以安全地将 `byte` 值转换为 `int` 类型,不会导致溢出问题。此方法的使用方式如下: ```csharp byte value = 200; int result = Convert.ToInt32(value); Console.WriteLine(result); // 输出 200 ``` 此方法适用于需要确保类型安全和数据完整性的场景[^1]。 ### 使用强制类型转换 `(int)byte` 如果开发者可以确定 `byte` 值在转换后不会导致数据丢失,推荐使用强制类型转换 `(int)`,因为这种方式在执行效率上更高。强制转换操作不会调用额外的方法,而是直接进行类型转换,因此性能更优。使用方式如下: ```csharp byte value = 150; int result = (int)value; Console.WriteLine(result); // 输出 150 ``` 需要注意的是,虽然 `byte` 值始终在 `int` 的取值范围内,但强制转换不包含额外的检查逻辑,仅适用于已知数据范围安全的场景[^2]。 ### 使用 `int.Parse()` 方法(不推荐) 尽管 `int.Parse()` 方法可以将字符串转换为整数,但它并不适用于直接将 `byte` 转换为 `int`。若需要将 `byte` 值以字符串形式解析为整数,可以通过将其转换为字符串后再使用 `int.Parse()`,但这种方式效率较低,且在处理大量数据时可能导致性能问题。示例代码如下: ```csharp byte value = 100; int result = int.Parse(value.ToString()); Console.WriteLine(result); // 输出 100 ``` 由于此方法需要将 `byte` 值转换为字符串,再解析为整数,因此仅建议在特殊场景下使用[^2]。 ### 异常处理数据验证 如果无法确定 `byte` 值是否可以安全地转换为 `int`,或者需要处理潜在的异常情况,建议结合 `try-catch` 块使用 `Convert.ToInt32()` 方法。这种方式可以避免程序因无效数据而崩溃,并提供更健壮的错误处理机制。示例代码如下: ```csharp byte value = 255; try { int result = Convert.ToInt32(value); Console.WriteLine(result); // 输出 255 } catch (Exception ex) { Console.WriteLine("转换失败: " + ex.Message); } ``` 此方法适用于数据来源不确定或需要更高容错能力的场景[^2]。 --- ### 总结 在 C# 中,将 `byte` 转换为 `int` 有多种方式,其中 `Convert.ToInt32(byte)` 是最常用的方法,能够安全地完成转换。如果性能是优先考虑因素,则可以使用强制类型转换 `(int)`。对于需要字符串解析的场景,`int.Parse()` 也可以使用,但效率较低。为了确保程序的健壮性,可以在不确定数据范围时结合异常处理机制使用 `Convert.ToInt32()` 方法。 --- ###
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值