请问高手:java中有没有象C中unsinged char的基本类型?(也就是能表示数据范围0~255) 负数在BYTE中是如何编码的? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 byte: -128~127int: -2147483648~2147483647short: -32768~32767long: -92233720368477808L~92233720368477807Lfloat: -+3.40282347E+38Fdouble: -+1.797693134862317E+308D BYTE是8位,所以2^8-1=255为了表示负数,用最高为表示正负,因而剩下7位表示大小--2^7-1=127在java里面好像没有unsigned这个关键字,要不就用int去记录,要不就用byte去记录,但是你自己知道具体存放的值到底表示什么意思就行啦。 不好弄啊。现在我是要在另外一个C程序里接收这个byte的值,而且只能用BYTE。现在我是用这个值-128来做,但还是有问题。比如200,我肯定要200-128=72这样来处理,但若是值为57,那57-128=-71,值传到我的C程序后,我收到的值再+128来还原。这样就有问题了。看看大家能不能解决?说到底我这样做的目的就是要把四位数的年份,比如“2003”,用两个byte来存储,这里涉及到位操作。分解完后,通过网络传到我的C程序,C程序这边用两个unsigned char来放这两个BYTE的值,这样,两个UNSIGNED CHAR值合并后,还原成原来的2003。看明白了么?在线探讨。我看其实主要是编码的问题。 如果仅仅解决你的问题倒有一个方法,就是利用网络字节序-高字节在前低字节在后。我的想法是由于java都是高字节在前,低字节在后,你用一个short存储年份(2个byte)然后通过socket直接write出去,c程序用2个unsigned char来读取。保证高位在前,低位在后。这样在java那里的各种运算都及其方便,不过我没时间测试,不知道可不可行。错了请见谅!:) 如果要解决你的问题,那么建议用short,可以把数据交叉一下。转换函数:/******shortTobyte****************************///低位 public byte lowBit(short num) { return (byte)(num&0x00ff); }//高位 public byte hiBit(short num) { return (byte)(num>>8); }//组合 public short combine(byte lowBit, byte hiBit) { return (short)(lowBit+ (hiBit<<8)); }/************************************************/ ubuntu只有管理员帐户如何登录 文件夹选择对话框 求:JAVA做的考试系统 javaEE 5.0里怎么没有servlet??? 求助ByteBuffer操作socket问题 JComboBox(下拉菜单)的触发事件是什么啊? static方法有没有多线程的问题? 一道SCJP题有请各大虾指教. 弱智问题jdk. 获取磁盘总空间和可用空间问题 请问构造函数可否递归调用?? 关于if语句
int: -2147483648~2147483647
short: -32768~32767
long: -92233720368477808L~92233720368477807L
float: -+3.40282347E+38F
double: -+1.797693134862317E+308D
为了表示负数,用最高为表示正负,因而剩下7位表示大小--2^7-1=127
在java里面好像没有unsigned这个关键字,要不就用int去记录,要不就用byte去记录,但是你自己知道具体存放的值到底表示什么意思就行啦。
现在我是用这个值-128来做,但还是有问题。
比如200,我肯定要200-128=72这样来处理,但若是值为57,那57-128=-71,值传到我的C程序后,我收到的值再+128来还原。这样就有问题了。看看大家能不能解决?
说到底我这样做的目的就是要把四位数的年份,比如“2003”,用两个byte来存储,这里涉及到位操作。分解完后,通过网络传到我的C程序,C程序这边用两个unsigned char来放这两个BYTE的值,这样,两个UNSIGNED CHAR值合并后,还原成原来的2003。
看明白了么?在线探讨。我看其实主要是编码的问题。
我的想法是由于java都是高字节在前,低字节在后,你用一个short存储年份(2个byte)
然后通过socket直接write出去,c程序用2个unsigned char来读取。保证高位在前,低位在后。
这样在java那里的各种运算都及其方便,不过我没时间测试,不知道可不可行。错了请见谅!:)
转换函数:/******shortTobyte****************************/
//低位
public byte lowBit(short num)
{
return (byte)(num&0x00ff);
}
//高位
public byte hiBit(short num)
{
return (byte)(num>>8);
}
//组合
public short combine(byte lowBit, byte hiBit)
{
return (short)(lowBit+ (hiBit<<8));
}/************************************************/