byte進float String符号化16進文字列回転16進byteについて

2036 ワード

まずStringだけが符号化に関係している.
byteが他のタイプと変換する場合は、大きな端点か小さな端点かに注意してください.
コード:Ascii Unicode gbk utf-8など
byteが8ビットを占めるのは、2つの16進数(0 xff)からなり、1つの16進数が4ビットを占めるか、8ビットの2進数からなるかなど、符号化には関係ないが、2進数で表すか、他の進数で表すこともできる.
「0 xff」のような16進文字列を16進byteに変換
String[] s="0X0C 0X03 0X00 0X04 0X00 0X02 0X84 0XD7".replace("X", "x").split(" ");
byte[] b=new byte[s.length];
for(int i=0;i<s.length;i++){
b[i]=(byte)Integer.parseInt(s[i].substring(2),16);
}
System.out.println(Arrays.toString(b));

byte[n]をStringに変換する.
new String(byte[n],0,length,"gbk");
floatは4バイトを占め、floatはbyteタイプに変換されます.
シフトによって実現されます
4 byteをfloatに変換
左シフト/***バイトを浮動小数点**@param bバイト(少なくとも4バイト)*@param index開始位置*@return*/public static float byte 2 float(byte[]b,int index){int l;l=b[index+];                                    l &= 0xff;                                           l |= ((long) b[index + 1] << 8);                     l &= 0xffff;                                         l |= ((long) b[index + 2] << 16);                    l &= 0xffffff;                                       l |= ((long) b[index + 3] << 24);                    return Float.intBitsToFloat(l);                   }
floatを4 byteに変換
右シフト
/**
*浮動小数点をバイトに変換
 * 
 * @param f
 * @return
 */
public static byte[] float2byte(float f) {
//floatをbyte[]に変換
int fbit = Float.floatToIntBits(f);
byte[] b = new byte[4];  
    for (int i = 0; i < 4; i++) {  
        b[i] = (byte) (fbit >> (24 - i * 8));  
    } 
    
//配列の反転
int len = b.length;
//ソース配列要素タイプと同じ配列を作成する
byte[] dest = new byte[len];
//ソース配列の変更を防止するため、ソース配列をコピー
System.arraycopy(b, 0, dest, 0, len);
byte temp;
//順位i番目と最下位i番目を交換する
for (int i = 0; i < len/2;++i) {
temp = dest[i];
dest[i] = dest[len - i - 1];
dest[len - i - 1] = temp;
}
    
    return dest;
    
}