请教 数据类型问题

时间:2021-06-29 20:14:15
怎么把一个数变成压缩型的十六进制数,比如:3512 怎么变成一个长度只有两位的压缩型数据呢???




望各位大侠赐教。谢谢!!!!

17 个解决方案

#1


大侠救命啊!

#2


什么叫压缩型的16进制~~麻烦解释下先:)

#3


其实我也不太清楚。具体是跟另外一个系统做接口,它有一项是什么压缩型的,它的长度只有两位,但我要送给它的数却是3512,怎么把3512转成两位呢?

#4


不是两位,是两个字节

int i = 3512;
short s = (short)i;

#5


哦,错了,带符号位。

看你的具体应用了。把你的原始说明贴出来

#6


Integer.toHexString(oldValue)

#7


唉 搞不懂 
说明是这样的“COPYBOOK中 S9(4)类型为压缩型CHAR,实为2位”

#8


Integer.toHexString(oldValue)
 

比如oldValue=3512
算出是 db8  但它的接口只定义了两位啊


不明?!!!!!

#9


通用包头数据格式
长度:100
说明:所有接口功能前100个字节均按此格式组成
变量名称 数据类型    含义          属性                       取值说明
SYSCDE X(4)  外部系统代号 必填 目前对外部系统按以下规则分配系统标识:

FUNCDE X(6)  功能码标识,用于区别不同的接口功能 必填 目前提供以下接口功能:

TERCDE X(12)    交易发起终端代码 选填(不填须默认为空)终端和操作柜员
TRNDAT X(8)       交易日          必填                 按YYYYMMDD格式组成
COMMIT X(1)    COMMIT点标识, 必填                       Y      —N
COMLEN 9(4)COMP   通讯区总长度 必填       通讯数据包的总长度
FILLER X(67)    预留                            默认为空

这就是那个接口的格式 "COMLEN 9(4)COMP   通讯区总长度 必填       通讯数据包的总长度".  只占两个长度,但要送一个数 这个数是3512.

#10


35的ASCII码,12的ASCII码。或者两者转为16进制后的ASCII码。是两位。

#11


你把你用来填充这个包头的代码贴出来。
或者说你准备用什么发送数据?用OutputStream?哪种类型的OutputStream?

另外,

x(8)是什么意思?8代表什么?
“COMLEN 9(4)COMP”是什么意思?从哪里能看出来要使用“2”个长度?

再者,你试一下我说的强制转换

#12


8是代表8位长度 4+6+12+8+1+67=98  总共100 剩下只有两位了



请问有没有方法把个字母放到一位字符里  如把db放到长度位一位的字符了

#13


是代表8位长度  4+6+12+8+1+67=98    总共100  剩下只有两位了  
 
 
 
请问有没有方法把两字母放到一位字符里    如把db放到长度位一位的字符里

#14


To: szcxz()
你的位是指什么?你是项目经理吧?

#15


to UnAgain:
一个小小程序员

#16


还剩下2个字节呢,3512的二进制码为:0000 1101 1011 1000,16进制数表示为0x0DB8
其中每个0或1占一位,一字节为8位,两字节16位.

----------做梦都想成为程序员5555555

#17


忘了说了,int a = 3521;当读取a的时候,得到的就是3521,不用去做什么转换地!int型的长度就是16位,不足16位的,正数前补0,象上面写的,负数要用补码表示,不足16位前面补1.而16进制不过是人为表示数字,和计算机无关,计算机只会读取0/1,而int也就是类型,告诉它一次应该读多少位!

楼主所说的"如把db放到长度位一位的字符里",一个位只能存一个1或者一个0,所以不可能放下.
字符d和字符b的ASCII码表示为7位.一般char类型为8位,这就浪费了一位,可惜我不会读啊,有高手进来讲一下啊!呵呵

    -----------我要当程序员

#1


大侠救命啊!

#2


什么叫压缩型的16进制~~麻烦解释下先:)

#3


其实我也不太清楚。具体是跟另外一个系统做接口,它有一项是什么压缩型的,它的长度只有两位,但我要送给它的数却是3512,怎么把3512转成两位呢?

#4


不是两位,是两个字节

int i = 3512;
short s = (short)i;

#5


哦,错了,带符号位。

看你的具体应用了。把你的原始说明贴出来

#6


Integer.toHexString(oldValue)

#7


唉 搞不懂 
说明是这样的“COPYBOOK中 S9(4)类型为压缩型CHAR,实为2位”

#8


Integer.toHexString(oldValue)
 

比如oldValue=3512
算出是 db8  但它的接口只定义了两位啊


不明?!!!!!

#9


通用包头数据格式
长度:100
说明:所有接口功能前100个字节均按此格式组成
变量名称 数据类型    含义          属性                       取值说明
SYSCDE X(4)  外部系统代号 必填 目前对外部系统按以下规则分配系统标识:

FUNCDE X(6)  功能码标识,用于区别不同的接口功能 必填 目前提供以下接口功能:

TERCDE X(12)    交易发起终端代码 选填(不填须默认为空)终端和操作柜员
TRNDAT X(8)       交易日          必填                 按YYYYMMDD格式组成
COMMIT X(1)    COMMIT点标识, 必填                       Y      —N
COMLEN 9(4)COMP   通讯区总长度 必填       通讯数据包的总长度
FILLER X(67)    预留                            默认为空

这就是那个接口的格式 "COMLEN 9(4)COMP   通讯区总长度 必填       通讯数据包的总长度".  只占两个长度,但要送一个数 这个数是3512.

#10


35的ASCII码,12的ASCII码。或者两者转为16进制后的ASCII码。是两位。

#11


你把你用来填充这个包头的代码贴出来。
或者说你准备用什么发送数据?用OutputStream?哪种类型的OutputStream?

另外,

x(8)是什么意思?8代表什么?
“COMLEN 9(4)COMP”是什么意思?从哪里能看出来要使用“2”个长度?

再者,你试一下我说的强制转换

#12


8是代表8位长度 4+6+12+8+1+67=98  总共100 剩下只有两位了



请问有没有方法把个字母放到一位字符里  如把db放到长度位一位的字符了

#13


是代表8位长度  4+6+12+8+1+67=98    总共100  剩下只有两位了  
 
 
 
请问有没有方法把两字母放到一位字符里    如把db放到长度位一位的字符里

#14


To: szcxz()
你的位是指什么?你是项目经理吧?

#15


to UnAgain:
一个小小程序员

#16


还剩下2个字节呢,3512的二进制码为:0000 1101 1011 1000,16进制数表示为0x0DB8
其中每个0或1占一位,一字节为8位,两字节16位.

----------做梦都想成为程序员5555555

#17


忘了说了,int a = 3521;当读取a的时候,得到的就是3521,不用去做什么转换地!int型的长度就是16位,不足16位的,正数前补0,象上面写的,负数要用补码表示,不足16位前面补1.而16进制不过是人为表示数字,和计算机无关,计算机只会读取0/1,而int也就是类型,告诉它一次应该读多少位!

楼主所说的"如把db放到长度位一位的字符里",一个位只能存一个1或者一个0,所以不可能放下.
字符d和字符b的ASCII码表示为7位.一般char类型为8位,这就浪费了一位,可惜我不会读啊,有高手进来讲一下啊!呵呵

    -----------我要当程序员