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

[求助]java 编码与解码

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

可能由下面一段Java进行解码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
  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的朋友帮忙看下,

另外是否与下面一段程序是对应的编码/解码
1
2
3
4
5
6
7
8
9
10
11
12
13
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直播授课

收藏
点赞
支持
分享
最新回复 (3)
雪    币: 233
活跃值: (302)
能力值: ( 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
用二进制表示为:
1
2
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
雪    币: 233
活跃值: (302)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
嗯~~确实如此,thank you
2012-4-23 08:35
0
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册