在Android中将int转换为byte

3
实际上,我需要通过蓝牙将整数值与位图一起传输。现在我的问题是我需要将整数作为单个字节值传输。是否有可能将int转换为单个字节值,并在那里检索它作为整数?我尝试了byteValue()和强制转换,但都没有用。如果我的方法正确,请帮助我解决这个问题,或者提供其他方法。 (每次使用强制转换时都会返回65535)

我也尝试将int转换为char,并尝试将其转换为byte(即使它只能工作到255),但这没有用... - Hussain
如果您无法直接发送整数值,请尝试使用序列化。 - Vivek
为什么不直接使用字节值,而完全不使用整数变量呢? - Gautham
4个回答

13
这个怎么样?
public static byte[] intToByteArray(int a)
{
    byte[] ret = new byte[4];
    ret[3] = (byte) (a & 0xFF);   
    ret[2] = (byte) ((a >> 8) & 0xFF);   
    ret[1] = (byte) ((a >> 16) & 0xFF);   
    ret[0] = (byte) ((a >> 24) & 0xFF);
    return ret;
}

并且

public static int byteArrayToInt(byte[] b)
{
    return (b[3] & 0xFF) + ((b[2] & 0xFF) << 8) + ((b[1] & 0xFF) << 16) + ((b[0] & 0xFF) << 24);
}

@Dante - 他询问了一个“单独的”字节。 - MByD
@Dante:我需要它是单字节的。那么我就无法区分“位图”和“整数”。 - Hussain
@Hussain,希望你能够更改格式。这可能吗?顺便说一下,在Java中char是2个字节。 - Dante May Code
@Dante:是的,可能可以,但无论如何我都需要int即(LENGTH)。怎么办?有什么方法吗? - Hussain
@Hussain,既然你能够获取CHAR|CHAR|CHAR,我认为你可以获取CHAR|CHAR|CHAR|INT。不需要进行转换...如果我的假设是错误的(你无法读取INT),那么我相信你可以获取CHAR|CHAR|CHAR|CHAR|CHAR,最后2个CHAR|CHARINTCHAR数组。这类似于我在答案中展示的BYTE数组的转换。 - Dante May Code
显示剩余6条评论

10

如果您完全确定,您的int变量包含一个字节值[-128; 127],那么这应该很简单:

int i = 100; // your int variable
byte b = (byte) i;

在将其转换回int时它无法工作。对于每个int,它都会返回某个默认值。 - Hussain
@Hussain 你是如何以及何时将其转换回来的? - Konstantin Burov
我将通过蓝牙将其作为ByteArray传递,并将其分离为int和其他数据。借助length,我将获取可用于该操作的Bitmap - Hussain
@Hussain,你需要发布一些代码,你的评论并没有让情况更加清晰。 - Konstantin Burov
我尝试过的可能代码都不起作用,所以只发了一条评论...这是我将通过Bluetooth发送的格式(CHAR | CHAR | CHAR | LENGTH | BITMAP)。现在我需要从中获取长度以便在另一部移动设备上获取位图。 - Hussain

2

一个字节(8位)只能包含2的8次方个无符号整数,即[0, 255]。对于有符号整数,你会失去第一位,范围变为[-128, 127]。如果你的整数适合这个范围,那么一个简单的类型转换就可以解决。


1

适用于0-255的数字。

int i = 200; // your int variable
byte b = (byte)(i & 0xFF);

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