首页
社区
课程
招聘
[求助]java 编码与解码
发表于: 2012-4-12 13:48 5615

[求助]java 编码与解码

2012-4-12 13:48
5615
字节数据: F0 8E 8D CD 01    ,应该是一个正整数,

可能由下面一段Java进行解码:
  public static int Test(byte[] bytes)
  {
  	  int index=0;
	  int sValue = bytes[index];
	  if (sValue < 0)
	  {
		  int result=0;
		  while (index < bytes.length)
		  {
			  int temp = sValue & 0x7F;
			  sValue = bytes[++index];
			  if (sValue >= 0)
			  {
				result = temp | svalue << 7;
				break;
			  }
			  temp = temp | (sValue & 0x7F) << 7;
			  sValue = bytes[++index];
			  if (sValue >= 0)
			  {
				result = temp | svalue << 14;
				continue;
			  }
			  temp = temp | (sValue & 0x7F) << 14;
			  sValue = bytes[++index];
			  if (sValue >= 0)
			  {
				result = temp | svalue << 21;
				break;
			  }
			  temp = temp | (sValue & 0x7F) << 21;
			  sValue = bytes[++index];
			  if (sValue >= 0)
			  {
				result = temp | svalue << 28;
				break;
			  }else{
				  throw;
			  }
		   }
		  return result;
	  }else{
			return sValue;
	  }
}


Java中byte类型  int类型与C类程序范围不一致, 不知此段程序何意? 有无懂Java的朋友帮忙看下,

另外是否与下面一段程序是对应的编码/解码
  private void Test2(long value)
  {
    while (true)
    {
      if ((0xFFFFFF80 & value) == 0L)
      {
        Write(value); //确定为value
        return;
      }
      Write( (0x80 | 0x7F & (int)value));//确定为 (0x80 | 0x7F & (int)value);
      value >>>= 7;
    }
  }

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 213
活跃值: (267)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
F0 8E 8D CD 01  =》  348345965
D8 BA C5 BE 09   =》  348345965

???
2012-4-12 14:27
0
雪    币:
能力值: (RANK: )
在线值:
发帖
回帖
粉丝
3
简单的说, 每个数的低7位有效, 最高位表示后续是否还有数据, 存放格式为小头方式, 高位数据在后.
F0 8E 8D CD 01:
F0 => 1111 0000 -> 80 + 70, 有效数学为 70, 后面还有, 当前数为 70
8E => 1000 1110 -> 80 + 0E, 有效数学为 0E, 后面还有, 当前数为 70 + (0e << 7) = 70 + 700 = 770
8D => 1000 1101 -> 80 + 0D, 有效数学为 0D, 后面还有, 当前数为 770 + (0D << 14) = 770 + 34000 = 34770
CD => 1100 1101 -> 80 + 4D, 有效数学为 4D, 后面还有, 当前数为 34770 + (4d << 21) = 34770 + 9A00000 = 9A34770
01 => 0000 0001 -> 00 + 01, 有效数学为 01, 后面没有了, 当前数为 9A34770 + (01 << 28) = 9A34770 + 10000000 = 19A34770
用二进制表示为:
000 0001 - 100 1101 - 000 1101 - 000 1110 - 111 0000
0   1    - 4   D    - 0   D    - 0   E    - 7   0
2012-4-17 20:04
0
雪    币: 213
活跃值: (267)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
嗯~~确实如此,thank you
2012-4-23 08:35
0
游客
登录 | 注册 方可回帖
返回
//