目前在做的SYSC 3303 Project是关于使用Java编写TFTP服务器/客户端。其中Java的发送数据包要用byte数组。凭着C语言的扎实基础,想当然的认为byte就是8位无符号整数。于是每一个数据包都由String转为byte发送。
但是,问题出现了。在发送ACK和DATA包时,传出的Block #有一部分不正确(例如:65535)。调试的时候显示在创建数据包的时候数据为0xFF_0xFF(65535),但是接收到的数据为0x3F_0x3F(16191)。
看了一下Java Specification,发现在Java中byte和int都是带符号的整数(signed integer),而且唯一的无符号整数(unsigned integer)是char。再往下看,原来char是按照UTF-16编码储存的(16位无符号整数)。郁闷啊。
接下来的工作就是查怎样从byte转换到int。因为带符号整数都是要做带符号扩展(signed extend),也就是说值为0xFF的byte在转成int之后,值为0xFFFFFFFF。终于在网上查到byte与int无符号转换方法,如下:
Java代码
int firstByte = 0;
int secondByte = 0;
int thirdByte = 0;
int fourthByte = 0;
firstByte = (0x000000FF & ((int)buf[index]));
secondByte = (0x000000FF & ((int)buf[index+1]));
thirdByte = (0x000000FF & ((int)buf[index+2]));
fourthByte = (0x000000FF & ((int)buf[index+3]));
long anUnsignedInt = 0;
buf[0] = (anUnsignedInt & 0xFF000000L) >> 24;
buf[1] = (anUnsignedInt & 0x00FF0000L) >> 16;
buf[2] = (anUnsignedInt & 0x0000FF00L) >> 8;
buf[3] = (anUnsignedInt & 0x000000FFL);
但是,问题并没有解决。看来不是cast问题。猛然醒悟,原来是从String转成byte的时候出问题了!看来整个Class都要修改了,再次郁闷一下。
总结:Java去掉了无符号的整数,据说本意是为了简化编程,但是事实上在做网络程序时,我们需要应用大量的无符号整数。另外,Java的一些内部机制也会对编程造成困惑,例如从String生成byte数组的算法。但是这些特别的地方一般的教授或者教材并不作介绍。因此,Java特别适合做Top-level程序(最高等级,即应用程序级)。
最后的一点个人总结:我这个智商没办法凌驾于Java之上,最多也就只能用用C语言了……
分享到:
相关推荐
AVA数据集json标签文件ava.json测试标签数据80种类,google研究AVA人类行为数据集的标签文件
AVA设计模式 AVA设计模式 AVA设计模式
AVA数据集压缩文件中包含的是整个AVA数据集,在官网下载下来的都是文本,作者手写了一个程序将一个个图片爬下来,仅供大家参考学习,如果纰漏欢迎指出。
虹光ava5扫描仪驱动程序是一款可以有效解决虹光ava5扫描仪在使用过程中出现的一些问题的驱动工具,本站提供了虹光ava5扫描仪驱动下载地址,有需要的朋友们就来下载使用吧。 虹光ava5是一款平板式扫描仪,采用的是...
<groupId>gui.ava <artifactId>html2image</artifactId> <version>0.9 maven 下载到 maven库下边的gui.ava.html2image0.9 及jar 可以直接使用,在 一些依赖库中下载不下来,所以放到这里方便使用
java Java中的递归 java Java中的递归
ava_v2.2.zip数据集。包含了标签和视频链接。
AVA 是一个项目,它提供视频的视听注释,以提高我们对人类活动的理解。 AVA 是一个项目,它提供视频的视听注释,以提高我们对人类活动的理解。每个视频片段都经过人工注释者的详尽注释,它们共同代表了丰富多样的...
ava源码ava源码ava源码ava源码ava源码ava源码ava源码ava源码ava源码ava源码ava源码ava源码ava源码ava源码ava源码ava源码ava源码
中庆与AVA对比表中庆与AVA对比表中庆与AVA对比表中庆与AVA对比表中庆与AVA对比表
ava编辑器学习版本ava编辑器学习版本ava编辑器学习版本ava编辑器学习版本ava编辑器学习版本
可以替换掉正服的启动文件夹,就可以玩一眼服了。若是想换回来,我资源里面有正服的启动文件夹。
传统的AVA特征分析基于近似Zoeppritz方程,但是近似Zoeppritz方程并不适用于薄层。为获得更准确的薄煤层地震响应特征,建立了薄煤层模型,并采用基于Brekhovskikh方程的薄层反射系数谱理论,模拟薄煤层PP波与PS波的振幅...
本文档中包含了AVA数据集的下载磁力链接,本文档中包含了AVA数据集的下载磁力链接,本文档中包含了AVA数据集的下载磁力链接,本文档中包含了AVA数据集的下载磁力链接,本文档中包含了AVA数据集的下载磁力链接
Ava Find Professional 1.5 一个用来搜索本地硬盘文件的工具。专业版。
ava Servlet API中文说明文档
ava-8-Features java8的新特性 大家共同学习
Ava_Find硬盘搜索_1.5.218 单文件版本
[使用时必须关闭杀毒软件] 功能:全图透视 人物上色 角色骨骼 十字准星 方向键上下选择 右方向键开启/关闭 问:为什么提示没有安装补丁? 答:要让本软件功能正常运行.必须安装官方所提供的三个补丁.三个补丁...
虹光ava5驱动适合于购买了虹光ava5型号扫描仪的朋友来进行使用,有了它以后扫描仪就可以进行正常的扫描工作,欢迎有需要的朋友下载使用!虹光ava5扫描仪参数简介产品类型:平板式扫描元件:CIS分 辨 率: 1200*...