public static byte[] hexToNet(int i) {
byte[] bt = new byte[2];
bt[1] = (byte) (i & 0xFF); // 底8位
bt[0] = (byte) ( (i >> 8) & 0xFF); // 高8位。
return bt;
}
---------------------------------
周二,我们又碰到了基于TUXEDO的CARRY类型的报文传输。其中要把某位字节值填上0x80。我想使用log4j把这值输出到文本文件来查看。于是使用 new String(b)后输出,使用UltraEdit-32 打开这个日志文本文件,查看ASCII码,发现是:0x3f。而不是想要的0x80
----------------------------------
使用C来写,是对的,代码如下:
// mytest.cpp : Defines the entry point for the console application.
#include "stdafx.h"
#include <string.h>
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <winsock.h>
int main(int argc, char* argv[])
{
FILE *fp = fopen("D://my.txt", "a");
unsigned short us1 ;
us1 = (unsigned short)strlen("PLC001") | 0x08000;
u_short us = htons(us1);
printf("(short)strlen(/"PLC001/") | 0x08000 =%d/n",us1);
fprintf(fp,"%s",&us,sizeof(u_short));
fclose(fp);
return 0;
}
------------------------------------------------------------------------------
后来经朋友指点,要使用流来输出,而不是log4j的输出。才解决了这个问题:
FileOutputStream fos = null;
File myFile = new File("D://test.txt");
byte[] b = new byte[1];
b[0] = (byte)0x80;
try{
if (!myFile.exists()) {
myFile.createNewFile();
}
fos = new FileOutputStream(myFile);
fos.write(b);
}
catch (Exception e) {
e.printStackTrace();
}
这时看日志文件,才看到想要看到的结果:0x80
-------------------------------------------------------------------------------
感悟:对java,对字节流处理的基础功课,还真得补一补!
今天,分析了一下 TUXEDO的CARRY ,其实也是由 byte[]组成的。因此,在网络传输中,肯定也是以 socket的DataOutputStream之类的来 wrrite(byte[])。