当前位置: 首页 > 知识库问答 >
问题:

为什么是字节。解析字节(“80”,16)失败?

殳毅
2023-03-14
System.out.println(Byte.toString( (byte)(1 << 7) ));//print "-128" 
System.out.println(Byte.parseByte("80", 16));//run time exception java.lang.NumberFormatException: Value out of range. Value:"80" Radix:16

为什么第一个成功而第二个失败?人们可能期望它们产生相同的输出。

共有2个答案

濮阳默
2023-03-14

第一个运算符是二进制移位-128表示二进制代码中的0b100000001向左移动了七次
在第二条语句中,您使用的基数表示hex数字,如Tutorialspoint示例中所示。如果您将语句更改为系统。出来println(Byte.parseByte(“80”,10)) ,则不会出现异常<希望这些解释能有所帮助。

骆文彬
2023-03-14

十六进制0x80是128进制。字节只能保存从-128到127(含)的值。因此,当您尝试解析128的值时,它会失败,因为该值不能表示为字节

如果要分析负值,则需要包含负号:

System.out.println(Byte.parseByte("-80", 16)); /* Prints -128 */

当执行缩小转换时,例如,如本例所示,从intbyte,可能会丢失有关值的总体大小的信息。将int值强制转换为byte只会丢弃除最低8位以外的所有位,因此将int128强制转换为byte将产生-128

 类似资料:
  • 本文向大家介绍什么是Python字节串?,包括了什么是Python字节串?的使用技巧和注意事项,需要的朋友参考一下 字符串是字符序列;这些是一个抽象概念,不能直接存储在磁盘上。字节字符串是字节序列-可以存储在磁盘上的东西。它们之间的映射是一种编码-其中有很多(并且无限可能)-并且您需要知道在特定情况下哪种适用才能进行转换,因为不同的编码可能会映射相同的字节到另一个字符串。例如,相同的字节字符串可以

  • 问题内容: 如果我有一个字节变量: 为什么以下工作: …但这不是吗? 编译器第一理解为第二吗? [编辑] 我知道演员,但我想提请您注意 我认为它们是平等的,那么为什么编译器会有所不同呢?之间有什么区别 问题答案: 因为是的等效项,而的类型被提升为(JLS§5.6.2二进制数值提升),因此,如果不进行显式转换,则不能将其结果分配给它。 根据JLS,§15.26.2复合赋值运算符: 形式为E1 op

  • 问题内容: 我正处于从文件中读取某些数据作为字节流的过程中,并且刚刚遇到了一些不确定如何处理的unicode字符串。 每个字符使用两个字节,只有第一个看起来包含实际数据,因此,例如,字符串“ trust”在文件中的存储方式为: 通常,我只使用正则表达式将零替换为零,从而删除空格。但是,文件中单词之间的空格是使用来实现的,因此尝试执行一个简单的String’replaceAll’会使它有点混乱。 我

  • 问题内容: 我有tyo字节变量 如果我将它们求和,则求和的值为整数。 为什么a + b是int? 问题答案: 因为Java语言规范这么说 对操作数(第5.6.2节)执行二进制数值提升。 请注意,二进制数值升级执行值集转换(第5.1.13节),并且可能执行拆箱转换(第5.1.8节)。 数字操作数上加法表达式的类型是其操作数的提升类型。 并且,关于数字促销, 扩展原语转换(第5.1.2节)适用于转换以

  • 问题内容: Java字节码注入到底是什么?为什么要使用它? 问题答案: Java代码编译为字节码()。字节码注入正在运行时进行修改,以在加载和运行之前立即将代码注入其中。 想象一个场景,我想找出多少次方法 在中被调用。我可以在类加载期间使用该拦截器编写一个代理,然后使用ASM对其进行修改,以便调用方法条目。 现在,我可以运行我的程序了: 并且在运行时,不仅可以完成其正常工作,而且还可以完成我在每次

  • 问题内容: 在Java中,如何获取byte []数组并从数组中删除前16个字节?我知道我可能必须通过将阵列复制到新阵列中来执行此操作。任何例子或帮助将不胜感激。 问题答案: 参见Java库中的类: