toHexString()函数

来源:1-1 文件的编码

qq_酸牛奶_0

2016-07-06 16:34

    toHexString()函数的参数是整型吗,如果实参是一个字节或者四个字节,是否会发生类型转换?

写回答 关注

3回答

  • 要做Java大师
    2016-07-06 18:10:38
    已采纳

    public static String toHexString(int i)

    这个是本方法的声明,一个一个解答问题,它的参数是整型的。

    在java中int类型就是四个字节的,所以如果实参是四个字节是不会发生类型转换的啊,其实有点没明白为什么问这个问题,是不是因为视频中出现的 .toHexString(char b&0xff)这个句子,会觉得里面是16位的数据?

    其实做这个主要是为了防止char转成int 类型由于计算机补码存储方式的原因,要专门设置最高位符号位。

    由于char类型是16位二进制的(两字节),而且最高位有可能是1,但在补码中首位为1表示负数,首位为0表示正数,所以,如果没有按位与,存在最高位是1的char型,则计算机会在转成32位时,先把它当成补码,觉得他是负数,然后前面就补16位1,

    现在做按位与运算,由于char类型只有16位,要和32位按位与,前面先补0,这样做之后,前16位就是0了,这样的存储方式符合计算机的数据类型存储规律。

    所以如果实参是一个字节或两个字节,那么如果不做0xff这样的按位与运算,它会自动类型转换(小类型转大类型),但很有可能会发生运算错误,如果是四个字节其实道理类似,就看你这个数据是否会在存取上面由于补码的运算问题导致乱码或者其他错误。

    (这样解释对你有帮助吗?

    -----------用心回答求表扬~)

    charsa... 回复要做Java...

    你们说的意思我大概明白,我有个疑问是(b & 0xff)之后是32位还是8位,如果是32位,以16进制打印出来的时候为什么不是000000c4,而结果是c4 。

    2016-07-18 14:38:56

    共 8 条回复 >

  • qq_酸牛奶_0
    2016-07-13 10:36:06

    @要做Java大师:

    似乎有的byte会补1有的不会:
    “慕课网ABC”的三种输出:
    System.out.print(Integer.toHexString(b)+" ");
    System.out.print(Integer.toHexString(b & 0xff)+" ");
    System.out.print(Integer.toBinaryString(b)+"\n");
    ffffffc4 c4 11111111111111111111111111000100
    ffffffbd bd 11111111111111111111111110111101
    ffffffbf bf 11111111111111111111111110111111
    ffffffce ce 11111111111111111111111111001110
    ffffffcd cd 11111111111111111111111111001101
    fffffff8 f8 11111111111111111111111111111000
    41 41 1000001
    42 42 1000010
    43 43 1000011

    charsa...

    b & 0xff 中有一点我觉得很奇怪,这里的b是一个字节也就是8位,不进行& 0xff 的话,会自动转换成32位,以16进制表示就是ffffffc4 ,那么 (b & 0xff)之后到底是几位,如果是32位的话,打印出来为什么不是000000c4 ,如果这样运算之后是8位,那么toHexString为什么没有给它转换成32位呢?

    2016-07-18 14:31:11

    共 1 条回复 >

  • SheldonParsons
    2016-07-06 17:43:37

    byte转int低位转高位啊,自动转型,低位转高位

    qq_酸牛奶...

    低位转高位什么意思?

    2016-07-10 21:16:50

    共 1 条回复 >

文件传输基础——Java IO流

为您介绍IO流的使用,以及对象的序列化和反序列化的内容

133769 学习 · 1030 问题

查看课程

相似问题