java类型 7bit字节与String 相互转换

在通信GSM,俗称的2G 通常采用的是7bit编码,是一种7位编码压缩算法,其实原理上来说一个字节占8个比特位,一般最高位都是符号运算位 ,通常忽略不计,7bit其实就是运用了最高位将字节往前移一位 就能空出一个比特位来给下个字节用,也就是说8个字节  之前的话 64位比特位来表达  现在 56位就足够少8个字节

这个是7bit转换为String代码

public    static  String  Gsm7BitDecode(byte[] lpBuf, byte[] lpUserData, int len)
   {
       int     byPosition,byHighPart,byLowPart;
       int     byCycle;
       int     bycle =0;
       byLowPart = 0;
       for(byCycle = 0; byCycle<len; byCycle++) {

           byPosition = byCycle % 7;
           byHighPart = (lpBuf[byCycle]) & BitAnd((byte)(7-byPosition));
           lpUserData[bycle] = (byte) ((byHighPart << byPosition) + byLowPart);

           byLowPart  = (lpBuf[byCycle] >> (byte)(7-byPosition)) & BitAnd((byte) (byPosition+1));
           if(byPosition == 6)
           {
               bycle++;
           lpUserData[bycle] = (byte) byLowPart;
               byLowPart = 0;
           }
           bycle++;
       }
       String s = new String(lpUserData);
       return s;
   }
这是String 转换为7bit的编码
private static byte[] get7Bit(String strContent) {
   // 结果
   byte[] arrResult = null;
   try {
      // 编码方式
      byte[] arrs = strContent.getBytes("ASCII");
      System.out.println(new String(arrs));

      arrResult = new byte[arrs.length - (arrs.length / 8)];
      int intRight = 0;
      int intLeft = 7;
      int intIndex = 0;
      for (int i = 1; i <= arrs.length; i++, intRight++, intLeft--) {
         if (i % 8 == 0) {
            intRight = -1;
            intLeft = 8;
            continue;
         }
         byte newItem = 0;
         if (i == arrs.length) {
            newItem = (byte) (arrs[i - 1] >> intRight);
         } else {
            newItem = (byte) ((arrs[i - 1] >> intRight) | (arrs[i] << intLeft));
         }

         arrResult[intIndex] = newItem;
         intIndex++;

      }
   } catch (UnsupportedEncodingException e) {
      e.printStackTrace();
   }
   return arrResult;
}





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
课程说明 1 课程介绍 1 课程目标 1 相关资料 1 第1章 七号信令系统概述 2 1.1 七号信令的概念和特点 2 1.1.1 基本术语 2 1.1.2 信令传送方式 3 1.2 七号信令系统的功能级结构 4 1.2.1 功能级结构原理 4 1.2.2 七号信令系统的功能级结构 4 1.3 GSM系统中的接口和协议 6 第2章 消息传递部分(MTP) 8 2.1 MTP功能级结构 8 2.1.1 信令数据链路级 8 2.1.2 信令链路功能级 8 2.1.3 信令网功能级 9 2.2 MTP信令消息格式 11 第3章 信令连接控制部分(SCCP) 14 3.1 SCCP概述 14 3.1.1 为什么需要SCCP 14 3.1.2 SCCP的应用特点 14 3.2 SCCP业务功能 15 3.2.1 无连接业务 15 3.2.2 面向连接业务 16 3.3 SCCP消息格式 17 3.3.1 SCCP消息结构 17 3.3.2 SCCP消息类型 18 3.3.3 SCCP消息参数 19 第4章 基站子系统应用部分(BSSAP) 23 4.1 BSSAP整体结构 23 4.2 BSSAP的分配功能 24 4.3 直接转移应用部分DTAP 24 4.4 BSS移动应用部分BSSMAP 25 4.5 BSSAP消息举例 25 4.5.1 BSSMAP消息举例 25 4.5.2 DTAP消息举例 26 第5章 A接口消息详解 27 5.1 概述 27 5.2 连接建立消息 28 5.2.1 位置更新消息( Location updating Request ) 28 5.2.2 CM业务请求消息( CM Service Request ) 31 5.2.3 连接确认消息(Connect Confirm ) 32 5.3 正常有连接消息 33 5.3.1 鉴权请求消息(AUTHENTICATION REQUEST ) 33 5.3.2 鉴权响应消息(AUTHENTICATION RESPONSE ) 35 5.3.3 加密命令消息(CIPHER MODE COMMAND ) 35 5.3.4 加密结束消息(CIPHER MODE COMPLETE ) 36 5.3.5 位置更新接收消息(LOCATION UPDATING ACCEPT ) 37 5.3.6 CM业务接收消息(CM SERVICE ACCEPT ) 38 5.3.7 SETUP消息(SETUP ) 38 5.3.8 呼叫进行消息( CALL PROCEEDING ) 39 5.3.9 指配请求消息(ASSIGNMENT REQUEST ) 40 5.3.10 指配结束消息(ASSIGNMENT COMPLETE ) 41 5.3.11 振铃消息(ALERTING ) 42 5.3.12 通话建立消息(CONNECT ) 43 5.3.13 连接确认消息(CONNECT ACKNOWLEDGE ) 43 5.3.14 挂机消息(DISCONNECT) 44 5.3.15 释放消息(RELEASE) 45 5.3.16 释放结束消息(RELEASE COMPLETE ) 45 5.3.17 清除命令( CLEAR COMMANG ) 46 5.3.18 清除结束(CLEAR COMPLETE) 47 5.4 无连接消息 47 5.4.1 复位电路(RESET CIRCUIT) 47 5.4.2 阻塞电路(BLOCK CIRCUIT) 49 5.4.3 解闭电路 ( UNBLOCK CIRCUIT ) 50 5.4.4 复位消息( RESET ) 51 5.4.5 未安装电路(unequipped circuit) 51 第6章 A-bis接口信令分析 53 6.1 A-bis接口主叫阶段信令分析 53 6.2 A-bis接口被叫阶段信令分析 54 6.3 A-bis接口拆线阶段信令分析 55 附录一 DTAP消息 58 附录二 BSSMAP消息 60
### 回答1: MySQL字段类型长度和Java类型有以下对应关系: 1. 字符串类型: - CHAR(n):Java类型String,长度为n。 - VARCHAR(n):Java类型String,长度为n。 - TEXT:Java类型String。 2. 数值类型: - INT:Java类型为int。 - BIGINT:Java类型为long。 - DECIMAL(p, s):Java类型为BigDecimal,其中p表示总位数,s表示小数位数。 3. 日期和时间类型: - DATE:Java类型java.sql.Date。 - TIME:Java类型java.sql.Time。 - DATETIME:Java类型java.sql.Timestamp。 4. 布尔类型: - BOOL、BOOLEAN:Java类型为boolean。 5. 二进制类型: - BLOB:Java类型为byte[]。 需要注意的是,Java的数据类型和MySQL的字段类型并不完全一致,因此在进行数据类型转换时需要注意类型匹配。在使用JDBC连接MySQL进行数据操作时,可以根据需要使用ResultSet的get方法和PreparedStatement的set方法来进行数据类型转换。同时,在设计数据库表结构时也需要根据实际需求选择合适的MySQL字段类型,以确保数据的存储和查询效率,并防止数据溢出或损失。 ### 回答2: MySQL的字段类型长度和Java类型对应如下: 1. 字符串类型(VARCHAR、CHAR): - VARCHAR(n) 对应 JavaString 类型,表示一个可变长度的字符串,最大长度为 n,例如:VARCHAR(50) 对应 JavaString。 - CHAR(n) 对应 JavaString 类型,表示一个固定长度的字符串,长度为 n,例如:CHAR(20) 对应 JavaString。 2. 数值类型(INT、BIGINT、FLOAT、DOUBLE、DECIMAL): - INT 对应 Java 的 int 类型。 - BIGINT 对应 Java 的 long 类型。 - FLOAT 对应 Java 的 float 类型。 - DOUBLE 对应 Java 的 double 类型。 - DECIMAL(precision, scale) 对应 Java 的 BigDecimal 类型,其中 precision 表示总长度,scale 表示小数点后的位数,例如:DECIMAL(10, 2) 对应 Java 的 BigDecimal。 3. 日期和时间类型(DATE、TIME、DATETIME、TIMESTAMP): - DATE 对应 Java 的 LocalDate 类型。 - TIME 对应 Java 的 LocalTime 类型。 - DATETIME 和 TIMESTAMP 都对应 Java 的 LocalDateTime 类型。 4. 布尔类型(BOOLEAN、BIT): - BOOLEAN 对应 Java 的 boolean 类型。 - BIT(n) 对应 Java 的 byte[] 类型。 5. 其他类型: - BLOB 对应 Java 的 byte[] 类型,用于存储二进制数据。 - TEXT 对应 JavaString 类型,用于存储大文本数据。 需要注意的是,MySQL的字段类型长度和Java类型对应是一种常见的映射方式,但不是唯一的方式。在不同的数据库和编程语言中,可能会有一些差异或变化。此外,还可以使用数据库连接工具或框架进行字段类型Java类型的自动映射。 ### 回答3: MySQL字段类型的长度和Java类型对应关系如下: 1. 数值类型: - TINYINT:Java类型为byte,长度为1字节。 - SMALLINT:Java类型为short,长度为2字节。 - MEDIUMINT:Java类型为int,长度为3字节。 - INT:Java类型为int,长度为4字节。 - BIGINT:Java类型为long,长度为8字节。 - FLOAT:Java类型为float,长度为4字节。 - DOUBLE:Java类型为double,长度为8字节。 - DECIMAL:Java类型为BigDecimal,长度可自定义。 2. 字符串类型: - CHAR:Java类型String,长度可自定义,最大为255字节。 - VARCHAR:Java类型String,长度可自定义,最大为65535字节。 - TEXT:Java类型String,长度可自定义,最大为65535字节。 - BLOB:Java类型为byte[],长度可自定义,最大为65535字节。 3. 日期和时间类型: - DATE:Java类型java.sql.Date,长度为3字节。 - TIME:Java类型java.sql.Time,长度为3字节。 - DATETIME:Java类型java.sql.Timestamp,长度为8字节。 - TIMESTAMP:Java类型java.sql.Timestamp,长度为4字节。 - YEAR:Java类型java.util.Date,长度为1字节。 4. 其他类型: - BOOLEAN:Java类型为boolean,长度为1字节。 - ENUM:Java类型String,长度可自定义。 需要注意的是,MySQL的字段类型长度可能会受到存储引擎和字符编码的影响,所以实际长度可能有所不同。对于字符串类型,长度指的是字符数,而不是字节数。另外,为了更准确地处理日期和时间类型,建议使用对应的Java日期时间类。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值