for(...) {
byte b = inputData[i];
short n;
if(b<=127)
n = b;
else
n = b-255;
}
byte b = inputData[i];
short n;
if(b<=127)
n = b;
else
n = b-255;
}
解决方案 »
- 请问如何解决spring+jdbc的死锁问题
- 一些Java面试题,求答案
- jxl如何向合并单元格写入值
- 求解析数字的正则表达式
- 请问:${......}到底是什么意思?
- 如何清空System.in?
- 关于生成可执行文件的问题,请进来讨论(200分)
- 5个5 用加减乘除各一次 最后=24 ,如何做???
- 向文件中写入中文,出现乱码,不知该如何解决,紧急!!马上给分
- 请问有谁参加过scjd的培训?5天要7700大元?有什么收获啊?然后谁有比较好的scjd英文书推荐?谢谢
- 问各位谁知道java的api是封装windows操作系统的api还是自己另行定义的api,因为java有自己的jvm就是有自己的指令集,所以我觉得应该是自
- 趁大家还没有睡觉 帮我看看
{
byte b = inputData[i];
short n;
if(b<=127)
n = b;
else
n = b-255;
}
if(b<=127) 有什么意义,这个是永真式
if(inputData.length%2!=0) throw new IllegalArgumentException();
short[] result=new short[inputData.length>>1];
for(int i=0;i<inputData.length;i+=2){
byte low=inputData[i];
byte high=inputData[i+1];
int bit4=0x0000000f;
int temp=(high>>>4)&bit4;
int s=temp;
s<<=4;
temp=high&bit4;
s|=temp;
s<<=4;
temp=(low>>>4)&bit4;
s|=temp;
s<<=4;
temp=low&bit4;
s|=temp;
result[i>>1]=(short)s;
}
return result;
}
用一个DataInput读byte[],用DataOutput输出short[]
1、能注释一下你的程序吗?
2、为什么你是以4位为单位移动?
我写了个简短的程序,以8位为单位移动,效果跟你的相似:
public class ByteToShort {
public static void main(String[] args) {
byte[] inData = {-2,-1};
short[] rtData = new short[inData.length/2];
rtData[0] = inData[1];
rtData[0] = (short)(rtData[0] << 8);
rtData[0] += inData[0];
System.out.println(rtData[0]);
}
}
3.我用下面的main函数测试你的程序
public static void main(String[] args) {
BToS bts = new BToS();
byte[] inData = {2,-1};
short[] rtData = ConvertToShort(inData);
for (int i = 0; i < rtData.length; i++)
System.out.println("" + rtData[i]);
}
inData = {2,-1}时输出为-254,inData = {-2,-1}时输出为-2;
而在相同的输入条件下,我的ByteToShort类输出的是-254和-258。
4.请教
我写了另外一个函数,企图将rtData[0]=-258存到inData[0]和inData[1]中,结果得到的结果是inData={-2,-2},而不是原来的inData = {-2,-1},这正是我困惑的地方。
非常感谢你提出不同意见,这里我一一解答,这个问题看起来很简单,实际上我觉得非常复杂.
1.因为java没有无符号数,但是这里必须当作无符号数处理,一般都是用位运算符号,而不是用算术运算符号,因为这里设计到负数的补码表示,就不一一介绍.2.这里不是不能以8位移动,但是容易出错,就像你的程序一样,这里设计到一个转换的问题,你的程序是有问题的.
public class ByteToShort {
public static void main(String[] args) {
byte[] inData = {-2,-1};
short[] rtData = new short[inData.length/2];
rtData[0] = inData[1];
rtData[0] = (short)(rtData[0] << 8);
rtData[0] += inData[0];//这里是错误的
System.out.println(rtData[0]);
}3.我的程序输出的结果是正确的,你的程序在上面出了问题.4.你可以先自己分析一下自己的程序,不要用算术运算符号
for(...)
{
byte b = inputData[i];
short n;
if(b<=127)
n = b;
else
n = b-255;//n = b - 256
}
直接指针转化即可,若硬要用java,也好。jni用上。哈哈。说笑了好题,
jsp 聊天室原代码
还有怎么法帖呀