gpt4 book ai didi

java - 字节文字上的编译器错误 "Incompatible types"

转载 作者:行者123 更新时间:2023-12-01 07:25:18 25 4
gpt4 key购买 nike

我见过很多情况,其中声明了一个字节,但来自类似方法的值intToByteStringToByte 被转换为字节,因为程序员提供了一个十六进制-值,一个整数-或字符串值。

我试图将实际的字节值分配给变量,而不需要任何转换或解析方法,如下所示:

public class ByteTest   {
/**
* This array will be used to hold three characters, together forming a string.
*/
private static byte[] string;

/**
* The main method of the program, where the byte-array is coming to use.
*/
public static void main(String args[]) {
//Construct the array with a limit to three bytes.
string = new byte[3];

/*
* Fill the three bytes with the binary values to create "O", "l" and "e".
*/
string[0] = 01001111;
string[1] = 01101100;
string[2] = 01100101;

//Print out "Ole".
System.out.println(string[0] + string[1] + string[2]);
}
}

但是我在编译器中收到以下错误:

java\ByteTest.java:8: error: incompatible types: possible lossy conversion from int to byte
string[0] = 01001111;
^

java\ByteTest.java:9: error: incompatible types: possible lossy conversion from int to byte
string[1] = 01101100;
^

java\ByteTest.java:10: error: incompatible types: possible lossy conversion from int to byte
string[2] = 01100101;
^

显然,我认为的八位,编译器认为是八个整数。有没有其他解决方案,我可以直接向变量/数组提供实际位?

最佳答案

表示二进制

string[0] = 0b01001111;
string[1] = 0b01101100;
string[2] = 0b01100101;

这让我想起了一个笑话:程序员有 10 种:懂二进制的和不懂二进制的。

由于字节已签名,0b1xxxxxxx 仍然存在问题,它需要是负数。在这种情况下,请使用以下技巧:

string[2] = 0b11100101 - 256;
string[2] = (byte) 0b11100101; // Or simply cast the int range value.

二进制也非常适合下划线使用:

string[2] = 0b0110_0101; // 0x65

并由@BackSlash注释:字节是二进制数据。要将它们解释为文本,它们必须与某些字符集/编码相关联。

String s = new String(string, StandardCharsets.US_ASCII);
System.out.println(s);

这会转换字节,将它们解释为 String 使用的 Unicode(以组合世界上所有的脚本)。

关于java - 字节文字上的编译器错误 "Incompatible types",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26102018/

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