一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java整型數與網絡字節序byte[]數組轉換關系詳解

Java整型數與網絡字節序byte[]數組轉換關系詳解

2020-12-23 13:24Devin Zhang Java教程

這篇文章主要介紹了Java整型數與網絡字節序byte[]數組轉換關系,結合實例形式歸納整理了java整型數和網絡字節序的byte[]之間轉換的各種情況,需要的朋友可以參考下

本文實例講述了Java整型數與網絡字節序byte[]數組轉換關系。分享給大家供大家參考,具體如下:

工作項目需要在java和c/c++之間進行socket通信,socket通信是以字節流或者字節包進行的,socket發送方須將數據轉換為字節流或者字節包,而接收方則將字節流和字節包再轉換回相應的數據類型。如果發送方和接收方都是同種語言,則一般只涉及到字節序的調整。而對于java和c/c++的通信,則情況就要復雜一些,主要是因為java中沒有unsigned類型,并且java和c在某些數據類型上的長度不一致。

針對這種情況,本文整理了java數據類型和網絡字節流或字節包(相當于java的byte數組)之間轉換方法。實際上網上這方面的資料不少,但往往不全,甚至有些有錯誤,于是就花了點時間對java整型數和網絡字節序的byte[]之間轉換的各種情況做了一些驗證和整理。整理出來的函數如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
public class ByteConvert {
  // 以下 是整型數 和 網絡字節序的 byte[] 數組之間的轉換
  public static byte[] longToBytes(long n) {
    byte[] b = new byte[8];
    b[7] = (byte) (n & 0xff);
    b[6] = (byte) (n >> 8 & 0xff);
    b[5] = (byte) (n >> 16 & 0xff);
    b[4] = (byte) (n >> 24 & 0xff);
    b[3] = (byte) (n >> 32 & 0xff);
    b[2] = (byte) (n >> 40 & 0xff);
    b[1] = (byte) (n >> 48 & 0xff);
    b[0] = (byte) (n >> 56 & 0xff);
    return b;
  }
  public static void longToBytes( long n, byte[] array, int offset ){
    array[7+offset] = (byte) (n & 0xff);
    array[6+offset] = (byte) (n >> 8 & 0xff);
    array[5+offset] = (byte) (n >> 16 & 0xff);
    array[4+offset] = (byte) (n >> 24 & 0xff);
    array[3+offset] = (byte) (n >> 32 & 0xff);
    array[2+offset] = (byte) (n >> 40 & 0xff);
    array[1+offset] = (byte) (n >> 48 & 0xff);
    array[0+offset] = (byte) (n >> 56 & 0xff);
  }
  public static long bytesToLong( byte[] array )
  {
    return ((((long) array[ 0] & 0xff) << 56)
       | (((long) array[ 1] & 0xff) << 48)
       | (((long) array[ 2] & 0xff) << 40)
       | (((long) array[ 3] & 0xff) << 32)
       | (((long) array[ 4] & 0xff) << 24)
       | (((long) array[ 5] & 0xff) << 16)
       | (((long) array[ 6] & 0xff) << 8)
       | (((long) array[ 7] & 0xff) << 0));
  }
  public static long bytesToLong( byte[] array, int offset )
  {
    return ((((long) array[offset + 0] & 0xff) << 56)
       | (((long) array[offset + 1] & 0xff) << 48)
       | (((long) array[offset + 2] & 0xff) << 40)
       | (((long) array[offset + 3] & 0xff) << 32)
       | (((long) array[offset + 4] & 0xff) << 24)
       | (((long) array[offset + 5] & 0xff) << 16)
       | (((long) array[offset + 6] & 0xff) << 8)
       | (((long) array[offset + 7] & 0xff) << 0));
  }
  public static byte[] intToBytes(int n) {
    byte[] b = new byte[4];
    b[3] = (byte) (n & 0xff);
    b[2] = (byte) (n >> 8 & 0xff);
    b[1] = (byte) (n >> 16 & 0xff);
    b[0] = (byte) (n >> 24 & 0xff);
    return b;
  }
  public static void intToBytes( int n, byte[] array, int offset ){
    array[3+offset] = (byte) (n & 0xff);
    array[2+offset] = (byte) (n >> 8 & 0xff);
    array[1+offset] = (byte) (n >> 16 & 0xff);
    array[offset] = (byte) (n >> 24 & 0xff);
  }
  public static int bytesToInt(byte b[]) {
    return  b[3] & 0xff
        | (b[2] & 0xff) << 8
        | (b[1] & 0xff) << 16
        | (b[0] & 0xff) << 24;
  }
  public static int bytesToInt(byte b[], int offset) {
    return  b[offset+3] & 0xff
        | (b[offset+2] & 0xff) << 8
        | (b[offset+1] & 0xff) << 16
        | (b[offset] & 0xff) << 24;
  }
  public static byte[] uintToBytes( long n )
  {
    byte[] b = new byte[4];
    b[3] = (byte) (n & 0xff);
    b[2] = (byte) (n >> 8 & 0xff);
    b[1] = (byte) (n >> 16 & 0xff);
    b[0] = (byte) (n >> 24 & 0xff);
    return b;
  }
  public static void uintToBytes( long n, byte[] array, int offset ){
    array[3+offset] = (byte) (n );
    array[2+offset] = (byte) (n >> 8 & 0xff);
    array[1+offset] = (byte) (n >> 16 & 0xff);
    array[offset]  = (byte) (n >> 24 & 0xff);
  }
  public static long bytesToUint(byte[] array) {
    return ((long) (array[3] & 0xff))
       | ((long) (array[2] & 0xff)) << 8
       | ((long) (array[1] & 0xff)) << 16
       | ((long) (array[0] & 0xff)) << 24;
  }
  public static long bytesToUint(byte[] array, int offset) {
    return ((long) (array[offset+3] & 0xff))
       | ((long) (array[offset+2] & 0xff)) << 8
       | ((long) (array[offset+1] & 0xff)) << 16
       | ((long) (array[offset]  & 0xff)) << 24;
  }
  public static byte[] shortToBytes(short n) {
    byte[] b = new byte[2];
    b[1] = (byte) ( n    & 0xff);
    b[0] = (byte) ((n >> 8) & 0xff);
    return b;
  }
  public static void shortToBytes(short n, byte[] array, int offset ) {
    array[offset+1] = (byte) ( n    & 0xff);
    array[offset] = (byte) ((n >> 8) & 0xff);
  }
  public static short bytesToShort(byte[] b){
    return (short)( b[1] & 0xff
           |(b[0] & 0xff) << 8 );
  }
  public static short bytesToShort(byte[] b, int offset){
    return (short)( b[offset+1] & 0xff
           |(b[offset]  & 0xff) << 8 );
  }
  public static byte[] ushortToBytes(int n) {
    byte[] b = new byte[2];
    b[1] = (byte) ( n    & 0xff);
    b[0] = (byte) ((n >> 8) & 0xff);
    return b;
  }
  public static void ushortToBytes(int n, byte[] array, int offset ) {
    array[offset+1] = (byte) ( n    & 0xff);
    array[offset] = (byte)  ((n >> 8) & 0xff);
  }
  public static int bytesToUshort(byte b[]) {
    return  b[1] & 0xff
        | (b[0] & 0xff) << 8;
  }
  public static int bytesToUshort(byte b[], int offset) {
    return  b[offset+1] & 0xff
        | (b[offset]  & 0xff) << 8;
  }
  public static byte[] ubyteToBytes( int n ){
    byte[] b = new byte[1];
    b[0] = (byte) (n & 0xff);
    return b;
  }
  public static void ubyteToBytes( int n, byte[] array, int offset ){
    array[0] = (byte) (n & 0xff);
  }
  public static int bytesToUbyte( byte[] array ){
    return array[0] & 0xff;
  }
  public static int bytesToUbyte( byte[] array, int offset ){
    return array[offset] & 0xff;
  }
  // char 類型、 float、double 類型和 byte[] 數組之間的轉換關系還需繼續研究實現。
}

測試程序如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
public class ByteConvertTest {
  public static String byte2Hex(byte[] buf)
  {
    StringBuffer strbuf = new StringBuffer();
    strbuf.append("{");
    for (byte b : buf)
    {
      if (b == 0)
      {
        strbuf.append("00");
      }
      else if (b == -1)
      {
        strbuf.append("FF");
      }
      else
      {
        String str = Integer.toHexString(b).toUpperCase();
        // sb.append(a);
        if (str.length() == 8)
        {
          str = str.substring(6, 8);
        }
        else if (str.length() < 2)
        {
          str = "0" + str;
        }
        strbuf.append(str);
      }
      strbuf.append(" ");
    }
    strbuf.append("}");
    return strbuf.toString();
  }
  public static byte[] longToBytes(long n) {
    byte[] b = new byte[8];
    b[7] = (byte) (n & 0xff);
    b[6] = (byte) (n >> 8 & 0xff);
    b[5] = (byte) (n >> 16 & 0xff);
    b[4] = (byte) (n >> 24 & 0xff);
    b[3] = (byte) (n >> 32 & 0xff);
    b[2] = (byte) (n >> 40 & 0xff);
    b[1] = (byte) (n >> 48 & 0xff);
    b[0] = (byte) (n >> 56 & 0xff);
    return b;
  }
  public static long bytesToLong( byte[] array )
  {
    return ((((long) array[ 0] & 0xff) << 56)
       | (((long) array[ 1] & 0xff) << 48)
       | (((long) array[ 2] & 0xff) << 40)
       | (((long) array[ 3] & 0xff) << 32)
       | (((long) array[ 4] & 0xff) << 24)
       | (((long) array[ 5] & 0xff) << 16)
       | (((long) array[ 6] & 0xff) << 8)
       | (((long) array[ 7] & 0xff) ));
  }
  public static int bytesToInt(byte b[]) {
    return  b[3] & 0xff
        | (b[2] & 0xff) << 8
        | (b[1] & 0xff) << 16
        | (b[0] & 0xff) << 24;
  }
  public static long bytesToUint(byte[] array) {
    return ((long) (array[3] & 0xff))
       | ((long) (array[2] & 0xff)) << 8
       | ((long) (array[1] & 0xff)) << 16
       | ((long) (array[0] & 0xff)) << 24;
  }
  public static byte[] uintToBytes( long n )
  {
    byte[] b = new byte[4];
    b[3] = (byte) (n & 0xff);
    b[2] = (byte) (n >> 8 & 0xff);
    b[1] = (byte) (n >> 16 & 0xff);
    b[0] = (byte) (n >> 24 & 0xff);
    return b;
  }
  public static byte[] shortToBytes(short n) {
    byte[] b = new byte[2];
    b[1] = (byte) ( n    & 0xff);
    b[0] = (byte) ((n >> 8) & 0xff);
    return b;
  }
  public static short bytesToShort(byte[] b){
    return (short)( b[1] & 0xff
           |(b[0] & 0xff) << 8 );
  }
  static void testShortConvert(){
    System.out.println("=================== short convert =============");
    System.out.println("byte2Hex(shortToBytes((short)0x11f2))"+byte2Hex(shortToBytes((short)0x11f2)));
    System.out.print("println 0x11f2:");
    System.out.println((short)0x11f2);
    System.out.println("byte2Hex(shortToBytes((short)0xf1f2))"+byte2Hex(shortToBytes((short)0xf1f2)));
    System.out.print("println 0xf1f2:");
    System.out.println((short)0xf1f2);
    System.out.print("println bytesToShort(shortToBytes((short)0x11f2)):");
    System.out.println((short)bytesToShort(shortToBytes((short)0x11f2)));
    System.out.print("println bytesToShort(shortToBytes((short)0xf1f2)):");
    System.out.println((short)bytesToShort(shortToBytes((short)0xf1f2)));
  }
  public static byte[] ushortToBytes(int n) {
    byte[] b = new byte[2];
    b[1] = (byte) (n & 0xff);
    b[0] = (byte) (n >> 8 & 0xff);
    return b;
  }
  public static int bytesToUshort(byte b[]) {
    return  b[1] & 0xff
        | (b[0] & 0xff) << 8;
  }
  static void testUshortConvert(){
    System.out.println("=================== Ushort convert =============");
    System.out.println("byte2Hex(ushortToBytes(0x11f2))"+byte2Hex(ushortToBytes(0x11f2)));
    System.out.print("println 0x11f2:");
    System.out.println(0x11f2);
    System.out.println("byte2Hex(ushortToBytes(0xf1f2))"+byte2Hex(ushortToBytes(0xf1f2)));
    System.out.print("println 0xf1f2:");
    System.out.println(0xf1f2);
    System.out.print("println bytesToUshort(ushortToBytes(0x11f2)):");
    System.out.println(bytesToUshort(ushortToBytes(0x11f2)));
    System.out.print("println bytesToUshort(ushortToBytes(0xf1f2)):");
    System.out.println(bytesToUshort(ushortToBytes(0xf1f2)));
  }
  public static byte[] ubyteToBytes( int n ){
    byte[] b = new byte[1];
    b[0] = (byte) (n & 0xff);
    return b;
  }
  public static int bytesToUbyte( byte[] array ){
    return array[0] & 0xff;
  }
  static void testUbyteConvert(){
    System.out.println("=================== Ubyte convert =============");
    System.out.println("byte2Hex(ubyteToBytes(0x1112))"+byte2Hex(ubyteToBytes(0x1112)));
    System.out.print("println 0x1112:");
    System.out.println(0x1112);
    System.out.println("byte2Hex(ubyteToBytes(0xf2))"+byte2Hex(ubyteToBytes(0xf2)));
    System.out.print("println 0xf2:");
    System.out.println(0xf2);
    System.out.print("println bytesToUbyte(ubyteToBytes(0x1112)):");
    System.out.println(bytesToUbyte(ubyteToBytes(0x1112)));
    System.out.print("println bytesToUbyte(ubyteToBytes(0xf1f2)):");
    System.out.println(bytesToUbyte(ubyteToBytes(0xf1f2)));
  }
  /**
   * @param args
   */
  public static void main(String[] args) {
    // TODO Auto-generated method stub
    byte[] array = new byte[4];
    array[3] = (byte) 0xF4;
    array[2] = 0x13;
    array[1] = 0x12;
    array[0] = 0x11;
    System.out.println("=================== Integer bytes =============");
    System.out.println("the bytes is:"+byte2Hex(array) );
    System.out.print("println bytesToInt :");
    System.out.println( bytesToInt(array));
    System.out.printf("printf bytesToInt :%X\n", bytesToInt(array));
    System.out.println("=================== long bytes =============");
    byte[] longBytes = new byte[8];
    longBytes[7] = (byte) 0xf7;
    longBytes[6] = (byte) 0x16;
    longBytes[5] = (byte) 0xf5;
    longBytes[4] = (byte) 0x14;
    longBytes[3] = (byte) 0xf3;
    longBytes[2] = (byte) 0x12;
    longBytes[1] = (byte) 0xf1;
    longBytes[0] = (byte) 0x10;
    System.out.println( "the bytes is:"+byte2Hex(longBytes) );
    System.out.printf("printf bytesToLong:%X\n",bytesToLong(longBytes));
    System.out.println("=================byte to long ================");
    byte b = (byte)0xf1;
    System.out.print("Println the byte:");
    System.out.println(b);
    System.out.printf("Printf the byte:%X\n",b);
    long l = b;
    System.out.print("Println byte to long:");
    System.out.println(l);
    System.out.printf("printf byte to long:%X\n",l);
    System.out.println("================= uint Bytes ================");
    byte[] uint = new byte[4];
    uint[3] = (byte) 0xf3;
    uint[2] = (byte) 0x12;
    uint[1] = (byte) 0xf1;
    uint[0] = (byte) 0xFF;
    System.out.println( "the bytes is:"+byte2Hex(uint) );
    System.out.printf("printf bytesToUint:%X\n",bytesToUint(uint));
    System.out.print("Println bytesToUint:");
    System.out.println(bytesToUint(uint));
    System.out.println("byte2Hex(uintToBytes(0x11f2f3f4f5f6f7f8l)):"+byte2Hex(uintToBytes(0x11f2f3f4f5f6f7f8l)));
    System.out.println("===============Long Integer==============");
    System.out.print("println 0x11f2f3f4f5f6f7f8l:");
    System.out.println(0x11f2f3f4f5f6f7f8l);
    System.out.printf("Printf 0x11f2f3f4f5f6f7f8l:%X\n",0x11f2f3f4f5f6f7f8l);
    System.out.println("println byte2Hex(longToBytes(0x11f2f3f4f5f6f7f8l))"+byte2Hex(longToBytes(0x11f2f3f4f5f6f7f8l)));
    // 注意,下面的這行,并不能獲得正確的uint。
    System.out.printf("printf bytesToUint(longToBytes(0x11f2f3f4f5f6f7f8l):%X\n",bytesToUint(longToBytes(0x11f2f3f4f5f6f7f8l)));
    System.out.println("===============bytesToLong(longToBytes())==============");
    System.out.println(bytesToLong(longToBytes(0x11f2f3f4f5f6f7f8l)));
    System.out.printf("%X\n",bytesToLong(longToBytes(0x11f2f3f4f5f6f7f8l)));
    testShortConvert();
    testUshortConvert();
    testUbyteConvert();
  }
}

希望本文所述對大家java程序設計有所幫助。

原文鏈接:http://www.cnblogs.com/devinzhang/archive/2012/09/28/2707605.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: ai换脸明星造梦工厂忘忧草 | 热99re久久精品国产首页 | 嘿嘿午夜| 久久re热在线视频精99 | 男人狂躁女人下半身 | 91李宗精品72集在线观看 | 九九365资源稳定资源站 | 日韩首页 | 亲爱的客栈第二季免费观看完整版 | 国产麻豆剧果冻传媒影视4934 | 精品国产成人a区在线观看 精品国产91久久久久久久 | 欧美一级视频在线高清观看 | 国内精品九一在线播放 | 成人精品亚洲人成在线 | 女上男下gifxxoo动态视频 | 乌克兰肥熟 | 母性本能在线观看 | 欧美折磨另类系列sm | 日韩精品国产自在欧美 | 国产精品久久久久毛片真精品 | 国产成人lu在线视频 | 波多野结衣在线观看视频 | 91yellow吧字幕网zmff7 | 九九九九九九伊人 | 国产小视频免费看 | 日韩高清在线观看 | 日本三级大学生17 | 视频一区国产精戏刘婷 | 香蕉精品高清在线观看视频 | 成年人黄色录像 | 成人黄色免费网站 | 日本韩国一区二区三区 | 四虎影院新网址 | 天天综合天天色 | 国内精品免费一区二区三区 | 99r在线播放| 九九99在线视频 | 精品视频在线免费 | 国产一区私人高清影院 | 亚洲mv国产精品mv日本mv | 激情艳妇 |