【问题标题】:typecasting an int to byte and vice versa将 int 类型转换为字节,反之亦然
【发布时间】:2013-09-17 06:29:47
【问题描述】:

我有一个整数 (val) 355,我使用类型转换将其转换为字节 (b) 并得到 99

int val = 355;
byte b = (byte) val; //b contains 99

现在我无法再次将这个 99 转换为 355,下面给出了我尝试过的内容

int returnVal = (int) b; //returnVal contains 99
int converted = returnVal & 0xFF; //converted contains 99

如何将 99 转换为 355?

在第二种情况下,值不同。现在,

int val = 161;
byte b = (byte) val; //b contains -95
int returnVal = (int) b; //returnVal contains -95
int converted = returnVal & 0xFF; //converted contains 161

在第二种情况下,值转换成功但不是第一次。

【问题讨论】:

    标签: casting integer byte


    【解决方案1】:

    当您从 int 转到 byte 时,您会丢失信息。对于任何输入 x,您都会得到 x & 0xFF

    而且这个过程是不可逆的。这就像取一加仑牛奶,倒入一品脱玻璃杯中,然后将品脱玻璃杯倒入一加仑空牛奶中,然后想知道为什么一加仑没有装满。

    【讨论】:

    • 我在上述场景中看到的唯一区别是,在第二种情况下,字节值为负,而在第一种情况下,值为正。有什么办法可以解决这个问题?
    • 了解整数的有符号和无符号表示。 2 的补码等。
    • 基本问题仍然存在:一加仑不适合一品脱。
    【解决方案2】:

    对于第一种情况,355 是 0x01、0x63。一个字节只有8位,所以在类型转换时应该忽略0x01,0x63是99,所以你得到99,但永远不会恢复到0x01,0x63,即355。

    【讨论】:

    • 解决办法是什么?我将如何获得 355?
    猜你喜欢
    • 1970-01-01
    • 2015-02-16
    • 1970-01-01
    • 2020-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-13
    • 1970-01-01
    相关资源
    最近更新 更多