java将二进制读入字节数组中,然后将俩个字节一起转化为十进制转换成二进制

从一个二进制文件中读取数据,是一个字节一个字节读取,存储在字符数组中,然后想把这四个字节还原成DWORD,怎么转啊?
[问题点数:20分,结帖人vivian0504]
从一个二进制文件中读取数据,是一个字节一个字节读取,存储在字符数组中,然后想把这四个字节还原成DWORD,怎么转啊?
[问题点数:20分,结帖人vivian0504]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
相关帖子推荐:
2011年5月 C/C++大版内专家分月排行榜第二2010年9月 C/C++大版内专家分月排行榜第二
2009年11月 C/C++大版内专家分月排行榜第三
2011年5月 C/C++大版内专家分月排行榜第二2010年9月 C/C++大版内专家分月排行榜第二
2009年11月 C/C++大版内专家分月排行榜第三
2011年5月 C/C++大版内专家分月排行榜第二2010年9月 C/C++大版内专家分月排行榜第二
2009年11月 C/C++大版内专家分月排行榜第三
2011年9月 C/C++大版内专家分月排行榜第二2011年4月 C/C++大版内专家分月排行榜第二2010年11月 C/C++大版内专家分月排行榜第二
2011年6月 C/C++大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。字节数组转换成二进制字符串解决思路
&来源:读书人网&【读书人网():综合教育门户网站】
字节数组转换成二进制字符串String ahellobyte[] ba.getBytesString cfor(int i0i
字节数组转换成二进制字符串String&a="hello";byte[]&b=a.getBString&c="";for(int&i=0;i&a.i++){c=c+Integer.toBinaryString(b[i]);}system.out.println(c);请问如何将一个字节数组转换成二进制字符串?&&我试了上面的方法&&发现不对。。。顺便请问如何将二进制字符串转换成字节数组[解决办法]//&string转bytebyte[]&b=&str.getBytes();System.out.println(Arrays.toString(b));//&byte转stringString&str2&=&new&String(b);System.out.println(str2);[解决办法]二进制字符串?&0,1那种?char[]&chs&=&str.toCharArray();String&bs&=&"";for(char&c:chs){bs&+=&Integer.toBinaryString(c);}3337人阅读
Java的二进制文件字节序转换
烤鱼片(@eii.dlmu)
字节序指的是数据存储的顺序问题,分为Big-Endian和Little-Endian,Big-Endian指的是数据中的高位存储在存储器的低位,Little-Endian正好相反。Big-Endian也叫大头在前,Little-Endian叫做小头在前。
举例而言,有一个4字节的数据0x,要存储在内存中或文件中编号0~3字节的位置,两种字节序的排列方式分别如下:
Big Endian
&低地址&&&&&&&&&&&&&&&&&&&&&&&&&& 高地址
&-----------------------------------------&
|&&&& 0 &&&&&|&&&&& 1 &&&&|&&&& 2 &&&&&&|&&&& &3&&& |
&+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
&|&&&& 01&&&& |&&&&& 02&&& |&&&& 03 &&&&&|&&&& 04&&& |
&+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Little Endian
&低地址&&&&&&&&&&&&&&&&&&&&&&&&&& 高地址
&-----------------------------------------&
|&&&& 0 &&&&&|&&&&& 1 &&&&|&&&& 2 &&&&&&|&&&& &3&&& |
&+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
&&|&&&& 04&&&& |&&&&& 03&&& |&&&& 02&&&&& |&&&& 01&&& |
&+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
如果按照我们一般的书写习惯来说,Big-Endian似乎更好一点。
具体应用中是用big还是little就要取决于系统平台了。不同的CPU会有不同的情况,比如说x86架构的cpu使用的是little模式,而PowerPC则是big。C/C++语言对数据的处理取决于其运行的CPU,而Java则统一使用big模式。
如果单纯仅是使用Java的话也就不存在大小字节序的处理问题,但有时候Java程序可能还要使用到C/C++这类语言生成的数据,尤其是在我们常用x86环境下,两种语言的字节序就会出现不一致的问题,必须做一定的处理。
处理的方法很简单,就是把数据按字节前后调换一下就可以了。
在这里是将长度为len的数据转换成字节数组str[len],带入以下函数,如果原始数据是little,也就是big=false的情况下,函数将对数据进行高低位的调换,并返回。
publicstaticbyte[] ReversEndian(byte str[],int len, boolean big)
&&&&&& byte
&&&&&& byte res[]=newbyte[len];
&&&&&& for(int i=0;i&i++)
&&&&&&&&&& res[i]=str[i];&&&&&&&&&&
&&&&&& if(big==false)
&&&&&&&&&& for(int i=0;i&i++)
&&&&&&&&&& {
&&&&&&&&&&&&& b=str[i];
&&&&&&&&&&&&& res[len-i-1]=b;&&&&&&&&&&&&
&&&&&&&&&& }
&&&&&& }&&&&&
&&&&&& return
假设现在我们需要从一个C/C++语言生成的二进制文件中读出一个float数据,可以如下处理。
String fileName=&file&;
//float变量是4字节长
byte b[]=newbyte[4];
File file=new File(fileName);
FileInputStream fis=new FileInputStream(file);
//从文件中读取一个4字节数据
fis.read(b);
b=ReversEndian(b,4,false);
//将字节数组还原成浮点数值
bb=ByteBuffer.wrap(b);
float value=bb.getFloat();
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:51732次
排名:千里之外
原创:12篇
评论:19条
(1)(2)(3)(2)(4)(3)在java中怎么把二进制的字符串转换成字节数组,转换后字节数组不是二进制哈
在java中怎么把二进制的字符串转换成字节数组,转换后字节数组不是二进制哈 5
不区分大小写匿名
java二进制,字节数组,字符,十六进制,BCD编码转换收藏
博客分类:
编程JavaJ# java二进制,字节数组,字符,十六进制,BCD编码转换 00:17/** *//** &&& * 把16进制字符串转换成字节数组 &&& * @param hex &&& * @return &&& */ public static byte[] hexStringToByte(String hex) { &&& int len = (hex.length() / 2); &&& byte[] result = new byte[len]; &&& char[] achar = hex.toCharArray(); &&& for (int i = 0; i & i++) { &&&& int pos = i * 2; &&&& result[i] = (byte) (toByte(achar[pos]) && 4 | toByte(achar[pos + 1])); &&& } &&& } private static byte toByte(char c) { &&& byte b = (byte) "ABCDEF".indexOf(c); &&& } /** *//** &&& * 把字节数组转换成16进制字符串 &&& * @param bArray &&& * @return &&& */ public static final String bytesToHexString(byte[] bArray) { &&& StringBuffer sb = new StringBuffer(bArray.length); &&& String sT &&& for (int i = 0; i & bArray. i++) { &&&& sTemp = Integer.toHexString(0xFF & bArray[i]); &&&& if (sTemp.length() & 2) &&&&& sb.append(0); &&&& sb.append(sTemp.toUpperCase()); &&& } &&& return sb.toString(); } /** *//** &&& * 把字节数组转换为对象 &&& * @param bytes &&& * @return &&& * @throws IOException &&& * @throws ClassNotFoundException &&& */ public static final Object bytesToObject(byte[] bytes) throws IOException, ClassNotFoundException { &&& ByteArrayInputStream in = new ByteArrayInputStream(bytes); &&& ObjectInputStream oi = new ObjectInputStream(in); &&& Object o = oi.readObject(); &&& oi.close(); &&& } /** *//** &&& * 把可序列化对象转换成字节数组 &&& * @param s &&& * @return &&& * @throws IOException &&& */ public static final byte[] objectToBytes(Serializable s) throws IOException { &&& ByteArrayOutputStream out = new ByteArrayOutputStream(); &&& ObjectOutputStream ot = new ObjectOutputStream(out); &&& ot.writeObject(s); &&& ot.flush(); &&& ot.close(); &&& return out.toByteArray(); } public static final String objectToHexString(Serializable s) throws IOException{ &&& return bytesToHexString(objectToBytes(s)); } public static final Object hexStringToObject(String hex) throws IOException, ClassNotFoundException{ &&& return bytesToObject(hexStringToByte(hex)); } /** *//** &&& * @函数功能: BCD码转为10进制串(阿拉伯数据) &&& * @输入参数: BCD码 &&& * @输出结果: 10进制串 &&& */ public static String bcd2Str(byte[] bytes){ &&& StringBuffer temp=new StringBuffer(bytes.length*2); &&& for(int i=0;i&bytes.i++){ &&&& temp.append((byte)((bytes[i]& 0xf0)&&&4)); &&&& temp.append((byte)(bytes[i]& 0x0f)); &&& } &&& return temp.toString().substring(0,1).equalsIgnoreCase("0")?temp.toString().substring(1):temp.toString(); } /** *//** &&& * @函数功能: 10进制串转为BCD码 &&& * @输入参数: 10进制串 &&& * @输出结果: BCD码 &&& */ public static byte[] str2Bcd(String asc) { &&& int len = asc.length(); &&& int mod = len % 2; &&& if (mod != 0) { &&&& asc = "0" + &&&& len = asc.length(); &&& } &&& byte abt[] = new byte[len]; &&& if (len &= 2) { &&&& len = len / 2; &&& } &&& byte bbt[] = new byte[len]; &&& abt = asc.getBytes(); &&& int j, &&& for (int p = 0; p & asc.length()/2; p++) { &&&& if ( (abt[2 * p] &= '0') && (abt[2 * p] &= '9')) { &&&&& j = abt[2 * p] - '0'; &&&& } else if ( (abt[2 * p] &= 'a') && (abt[2 * p] &= 'z')) { &&&&& j = abt[2 * p] - 'a' + 0x0a; &&&& } else { &&&&& j = abt[2 * p] - 'A' + 0x0a; &&&& } &&&& if ( (abt[2 * p + 1] &= '0') && (abt[2 * p + 1] &= '9')) { &&&&& k = abt[2 * p + 1] - '0'; &&&& } else if ( (abt[2 * p + 1] &= 'a') && (abt[2 * p + 1] &= 'z')) { &&&&& k = abt[2 * p + 1] - 'a' + 0x0a; &&&& }else { &&&&& k = abt[2 * p + 1] - 'A' + 0x0a; &&&& } &&&& int a = (j && 4) + &&&& byte b = (byte) &&&& bbt[p] = &&& } &&& } /** *//** &&& * @函数功能: BCD码转ASC码 &&& * @输入参数: BCD串 &&& * @输出结果: ASC码 &&& */ public static String BCD2ASC(byte[] bytes) { &&& StringBuffer temp = new StringBuffer(bytes.length * 2); &&& for (int i = 0; i & bytes. i++) { &&&& int h = ((bytes[i] & 0xf0) &&& 4); &&&& int l = (bytes[i] & 0x0f);&& &&&& temp.append(BToA[h]).append( BToA[l]); &&& } &&& return temp.toString() ; } /** *//** &&& * MD5加密字符串,返回加密后的16进制字符串 &&& * @param origin &&& * @return &&& */ public static String MD5EncodeToHex(String origin) { &&&&&& return bytesToHexString(MD5Encode(origin)); &&&& } /** *//** &&& * MD5加密字符串,返回加密后的字节数组 &&& * @param origin &&& * @return &&& */ public static byte[] MD5Encode(String origin){ &&& return MD5Encode(origin.getBytes()); } /** *//** &&& * MD5加密字节数组,返回加密后的字节数组 &&& * @param bytes &&& * @return &&& */ public static byte[] MD5Encode(byte[] bytes){ &&& MessageDigest md= &&& try { &&&& md = MessageDigest.getInstance("MD5"); &&&& return md.digest(bytes); &&& } catch (NoSuchAlgorithmException e) { &&&& e.printStackTrace(); &&&& return new byte[0]; &&& } & } //关于byte: signed byte 把 0x00 ~ 0xff 映射成范围 0~127和 -128~-1 两段,比较简单的办法用 (b+256)%256的办法令其值回到0~255,或者用&0xff并赋给一个int。参考
请看清楚我的二进制字符串转换成字节数组,不是十六进制字符串转换成字节数组!
相关知识等待您来回答
编程领域专家2322人阅读
java二进制,字节数组,字符,十六进制,BCD编码转换2007-06-07&00:17/**&*//**&&&&*&把16进制字符串转换成字节数组&&&&*&@param&hex&&&&*&@return&&&&*/public&static&byte[]&hexStringToByte(String&hex)&{&&&&int&len&=&(hex.length()&/&2);&&&&byte[]&result&=&new&byte[len];&&&&char[]&achar&=&hex.toCharArray();&&&&for&(int&i&=&0;&i&&&&i++)&{&&&&&int&pos&=&i&*&2;&&&&&result[i]&=&(byte)&(toByte(achar[pos])&&&&4&|&toByte(achar[pos&+&1]));&&&&}&&&&return&}private&static&byte&toByte(char&c)&{&&&&byte&b&=&(byte)&&ABCDEF&.indexOf(c);&&&&return&b;}/**&*//**&&&&*&把字节数组转换成16进制字符串&&&&*&@param&bArray&&&&*&@return&&&&*/public&static&final&String&bytesToHexString(byte[]&bArray)&{&&&&StringBuffer&sb&=&new&StringBuffer(bArray.length);&&&&String&sT&&&&for&(int&i&=&0;&i&&&bArray.&i++)&{&&&&&sTemp&=&Integer.toHexString(0xFF&&&bArray[i]);&&&&&if&(sTemp.length()&&&2)&&&&&&sb.append(0);&&&&&sb.append(sTemp.toUpperCase());&&&&}&&&&return&sb.toString();}/**&*//**&&&&*&把字节数组转换为对象&&&&*&@param&bytes&&&&*&@return&&&&*&@throws&IOException&&&&*&@throws&ClassNotFoundException&&&&*/public&static&final&Object&bytesToObject(byte[]&bytes)&throws&IOException,&ClassNotFoundException&{&&&&ByteArrayInputStream&in&=&new&ByteArrayInputStream(bytes);&&&&ObjectInputStream&oi&=&new&ObjectInputStream(in);&&&&Object&o&=&oi.readObject();&&&&oi.close();&&&&return&o;}/**&*//**&&&&*&把可序列化对象转换成字节数组&&&&*&@param&s&&&&*&@return&&&&*&@throws&IOException&&&&*/public&static&final&byte[]&objectToBytes(Serializable&s)&throws&IOException&{&&&&ByteArrayOutputStream&out&=&new&ByteArrayOutputStream();&&&&ObjectOutputStream&ot&=&new&ObjectOutputStream(out);&&&&ot.writeObject(s);&&&&ot.flush();&&&&ot.close();&&&&return&out.toByteArray();}public&static&final&String&objectToHexString(Serializable&s)&throws&IOException{&&&&return&bytesToHexString(objectToBytes(s));}public&static&final&Object&hexStringToObject(String&hex)&throws&IOException,&ClassNotFoundException{&&&&return&bytesToObject(hexStringToByte(hex));}/**&*//**&&&&*&@函数功能:&BCD码转为10进制串(阿拉伯数据)&&&&*&@输入参数:&BCD码&&&&*&@输出结果:&10进制串&&&&*/public&static&String&bcd2Str(byte[]&bytes){&&&&StringBuffer&temp=new&StringBuffer(bytes.length*2);&&&&for(int&i=0;i&bytes.i++){&&&&&temp.append((byte)((bytes[i]&&0xf0)&&&4));&&&&&temp.append((byte)(bytes[i]&&0x0f));&&&&}&&&&return&temp.toString().substring(0,1).equalsIgnoreCase(&0&)?temp.toString().substring(1):temp.toString();}/**&*//**&&&&*&@函数功能:&10进制串转为BCD码&&&&*&@输入参数:&10进制串&&&&*&@输出结果:&BCD码&&&&*/public&static&byte[]&str2Bcd(String&asc)&{&&&&int&len&=&asc.length();&&&&int&mod&=&len&%&2;&&&&if&(mod&!=&0)&{&&&&&asc&=&&0&&+&&&&&&len&=&asc.length();&&&&}&&&&byte&abt[]&=&new&byte[len];&&&&if&(len&&=&2)&{&&&&&len&=&len&/&2;&&&&}&&&&byte&bbt[]&=&new&byte[len];&&&&abt&=&asc.getBytes();&&&&int&j,&k;&&&&for&(int&p&=&0;&p&&&asc.length()/2;&p++)&{&&&&&if&(&(abt[2&*&p]&&=&'0')&&&&(abt[2&*&p]&&=&'9'))&{&&&&&&j&=&abt[2&*&p]&-&'0';&&&&&}&else&if&(&(abt[2&*&p]&&=&'a')&&&&(abt[2&*&p]&&=&'z'))&{&&&&&&j&=&abt[2&*&p]&-&'a'&+&0x0a;&&&&&}&else&{&&&&&&j&=&abt[2&*&p]&-&'A'&+&0x0a;&&&&&}&&&&&if&(&(abt[2&*&p&+&1]&&=&'0')&&&&(abt[2&*&p&+&1]&&=&'9'))&{&&&&&&k&=&abt[2&*&p&+&1]&-&'0';&&&&&}&else&if&(&(abt[2&*&p&+&1]&&=&'a')&&&&(abt[2&*&p&+&1]&&=&'z'))&{&&&&&&k&=&abt[2&*&p&+&1]&-&'a'&+&0x0a;&&&&&}else&{&&&&&&k&=&abt[2&*&p&+&1]&-&'A'&+&0x0a;&&&&&}&&&&&int&a&=&(j&&&&4)&+&k;&&&&&byte&b&=&(byte)&a;&&&&&bbt[p]&=&b;&&&&}&&&&return&}/**&*//**&&&&*&@函数功能:&BCD码转ASC码&&&&*&@输入参数:&BCD串&&&&*&@输出结果:&ASC码&&&&*/public&static&String&BCD2ASC(byte[]&bytes)&{&&&&StringBuffer&temp&=&new&StringBuffer(bytes.length&*&2);&&&&for&(int&i&=&0;&i&&&bytes.&i++)&{&&&&&int&h&=&((bytes[i]&&&0xf0)&&&&&4);&&&&&int&l&=&(bytes[i]&&&0x0f);&&&&&&&&temp.append(BToA[h]).append(&BToA[l]);&&&&}&&&&return&temp.toString()&;}/**&*//**&&&&*&MD5加密字符串,返回加密后的16进制字符串&&&&*&@param&origin&&&&*&@return&&&&*/public&static&String&MD5EncodeToHex(String&origin)&{&&&&&&&&return&bytesToHexString(MD5Encode(origin));&&&&&}/**&*//**&&&&*&MD5加密字符串,返回加密后的字节数组&&&&*&@param&origin&&&&*&@return&&&&*/public&static&byte[]&MD5Encode(String&origin){&&&&return&MD5Encode(origin.getBytes());}/**&*//**&&&&*&MD5加密字节数组,返回加密后的字节数组&&&&*&@param&bytes&&&&*&@return&&&&*/public&static&byte[]&MD5Encode(byte[]&bytes){&&&&MessageDigest&md=null;&&&&try&{&&&&&md&=&MessageDigest.getInstance(&MD5&);&&&&&return&md.digest(bytes);&&&&}&catch&(NoSuchAlgorithmException&e)&{&&&&&e.printStackTrace();&&&&&return&new&byte[0];&&&&}&&}//关于byte:&&&&signed&byte&把&0x00&~&0xff&映射成范围&0~127和&-128~-1&&&&两段,比较简单的办法用&(b+256)%256的办法令其值回到0~255,或者用&0xff并赋给一个int。参考http://:8080/beyond-pebble/pinxue//5.html&
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:528449次
积分:11884
积分:11884
排名:第377名
原创:680篇
评论:121条
(1)(2)(1)(1)(2)(3)(4)(7)(2)(1)(1)(9)(14)(9)(3)(2)(3)(12)(34)(74)(37)(73)(42)(74)(36)(12)(33)(32)(11)(38)(43)(18)(19)(27)}

我要回帖

更多关于 十进制转换成二进制 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信