文档章节

byte转int出现的符号错误

开源中国驻成都办事处
 开源中国驻成都办事处
发布于 2015/06/16 12:52
字数 233
阅读 13
收藏 0
点赞 0
评论 0

这是来自于一个Bug的经验教训。服务端序列化一个大小为2个字节的无符号整形数,客户端收到后按位或来自恢复(每个字节存为byte)。原始代码:

int v = (data[offset++] << 8) | (data[offset++]);

无符号整形数0x00D6在接收到解出来变成了-42。

原因其实很简单,是因为byte本身是有符号的,它放不下0xD6。改动也比较简单:

int v = ((status[offset++] << 8) & 0xFF) | ((status[offset++]) & 0xFF);

附测试的小程序

public class ByteSheft {
	public static void main(String[] args){
		byte[] status = new byte[2];
		status[0] = 0x00;
		status[1] = (byte) 0xD6;
		
		int v1 = ((status[0] << 8) | (status[1]));
		int v2 = (status[0] << 8);
		int v3 = (status[1]);
		int v4 = (status[1] & 0xFF);
		
		System.out.println(v1);
		System.out.println(v2);
		System.out.println(v3);
		System.out.println(v4);
	}
}

在赋值的第五行,如果没有强转编译器会报错,其实这个错误信息也我们提示了这个错误。

输出:

-42

0

-42

214




© 著作权归作者所有

共有 人打赏支持
开源中国驻成都办事处
粉丝 84
博文 287
码字总数 335913
作品 0
成都
程序员
mysql utf8mb4与emoji表情【转】

MYSQL 5.5 之前, UTF8 编码只支持1-3个字节,只支持BMP这部分的unicode编码区, BMP是从哪到哪,到http://en.wikipedia.org/wiki/MappingofUnicodecharacters这里看,基本就是0000~FFFF这一...

万里虎
2016/03/16
63
0
java 类型转换的原理

最近在看JDK的源码,在看源码的时候看到了0xff这么个东东,从这里引出了类型转换。因此在此记录下。 在写原理之前先看几个例子。byte b=-1;int a=b;然后打印a得出的结果是-1.int b=-1;byte ...

小宋
2016/04/04
196
0
Java 位运算再学习-byte负数问题

代码Review中出现的问题. 基础知识不是很牢固,要时刻注意积累. 基础知识 byte:一个字节(8位)(-128~127)(-2的7次方到2的7次方-1) short:两个字节(16位)(-32768~32767)(-2的15次方...

SuShine
2016/03/30
209
0
java Byte和各数据类型(short,int,long,float,double)之间的转换

在Java的网络编程中传输的经常是byte数组,但我们实际中使用的数据类型可能是任一种数据类型,这就需要在它们之间相互转换,转换的核心在于将其他类型的数据的每一位转换成byte类型的数据。下...

phacks
2015/01/23
0
0
mysql utf8mb4与emoji表情

MYSQL 5.5 之前, UTF8 编码只支持1-3个字节,只支持BMP这部分的unicode编码区, BMP是从哪到哪,到http://en.wikipedia.org/wiki/MappingofUnicodecharacters这里看,基本就是0000~FFFF这一...

铂金大雕
2013/08/17
0
5
C语言宏定义使用技巧

写好C语言,漂亮的宏定义很重要,使用宏定义可以防止出错,提高可移植性,可读性,方便性等等。下面列举一些成熟软件中常用得宏定义。。。。。。 1,防止一个头文件被重复包含 #ifndef COMD...

晨曦之光
2012/03/09
56
0
Java 中int与byte数组转换详解

1、与运算符的理解(&): 参加运算的两个数据,按二进位进行“与”运算。如果两个相应的二进位都为1,则该位的结果值为1,否则为0。即 0&0=0;0&1=0;1&0=0;1&1=1; 例子:int x = 6225555...

jiachcheng
2012/12/21
0
0
byte&oxff之格式转换原理解析

最近需要一个将字节数组转换为十六进制字符串输出的函数,于是开始编码如下: 1 2 3 4 5 6 7 8 9 10 11 运行测试,一旦遇到负数总出现未可预料的结果,如参数为{-125,125,115,89}时,运行...

zmx729618
2017/12/13
0
0
java 中int与byte数组转换详解

1、与运算符的理解(&): 参加运算的两个数据,按二进位进行“与”运算。如果两个相应的二进位都为1,则该位的结果值为1,否则为0。即 0&0=0;0&1=0;1&0=0;1&1=1; 例子:int x = 6225555...

PERSIST-ZP
2016/08/16
20
0
基础知识:java基础

1).java的关键字: 访问控制 private protected public 类,方法和变量修饰符 abstract class extends final implements interface native new static strictfp synchronized transient volati......

lmxy1990
2016/09/09
28
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

java的反射机制理解

一、概念说明 java的反射机制,是在运行状态下,可以动态获取任意一个类的属性和方法;可以动态调用一个对象任意方法; 二、反射相关类 java.lang.Class; //类 java.lang.re...

盼望明天
7分钟前
0
0
nginx反向代理-多端口映射

代码解释 1.1 http:www.baidu.test.com默认是80,访问“/”利用反向代理,然后访问本地8083; 1.2 8083代表本地的前端工程访问地址,前端需要访问后台数据,”/”,继续代理到后台地址9803; ...

lilugirl
9分钟前
0
0
Jfinal使用log4j2打印日志

1,添加maven配置 <properties><log4j2.version>2.11.0</log4j2.version><slf4j.version>1.7.25</slf4j.version></properties> <!--slf4j及log4j2日志 --><dependency> ......

iborder
10分钟前
0
0
如何在Rancher 2.0上快速部署Datadog

Datadog是一种流行的托管监控解决方案,用于聚合和分析分布式系统的指标和事件。从基础架构集成到协作仪表板,Datadog为用户提供了一个简洁的单一窗格视图,用户可以快速查看对其最重要的信息...

RancherLabs
13分钟前
0
0
Java示例演示Functor 和monad

This article was initially an appendix in our Reactive Programming with RxJavabook. However introduction to monads, albeit very much related to reactive programming, didn't suit......

Quan全
31分钟前
0
0
微信官方jssdk Demo

1.html部分 <!DOCTYPE html><!-- saved from url=(0028){sh:$selfUrl} --><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta charset="utf-8"......

koloor
34分钟前
1
0
数据库命名规范

https://www.cnblogs.com/pangguoming/p/7126512.html 摘要:当前研发工作中经常出现因数据库表、数据库表字段格式不规则而影响开发进度的问题,在后续开发使用原来数据库表时,也会因为数据...

塔塔米
35分钟前
0
0
java https 请求工具类-通用

package com.ra.common.util; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintW......

轻量级赤影
35分钟前
0
0
MFC界面套包BCG Pro Edition for MFC正式发布v27.3|附下载

BCGControlBar Professional Edition for MFC是MFC的一个扩展库,您可以用来构建类似于Microsoft Office 2000/XP/2003/2007/2010/2013 和 Microsoft Visual Studio-like(打印、用户定制工具......

Miss_Hello_World
35分钟前
0
0
Spring Cloud云服务 - HongHu架构common-service 项目构建过程

上一篇我们介绍了《整合spring cloud云服务架构 - HongHu云架构common-service代码结构分析》,本节我们将对common-service整个项目进行剖析,将整个构建的流程给记录下来,让更多的关注者来...

itcloud
36分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部