1. 程式人生 > >Chapter 6 自定義資料協議【第十三講】 通過大端序列方法將4個位元組int轉成 byte陣列

Chapter 6 自定義資料協議【第十三講】 通過大端序列方法將4個位元組int轉成 byte陣列


第一種方法: 通過大端序列方法將4個位元組int轉成 byte陣列

大端序列方法:

int2bytes:

將int 從高到低位分別儲存到 byte[0] ~ byte[3]

    byte[] bytes = new byte[4];

     for (int i = 0; i < bytes.length; i++) {

       bytes[i] = (byte) ((val >> 8 * (3 - i)));

     }

當 i =0 時, bytes[0] =  (byte) ((val >> 24));

一個int 32位, 向右移動24位,高32-24=8位將移動到最低位上,通過強制byte轉換,僅僅保留8個位元組。

例如:01111111 00000000 00000000 00000000  --(>> 24)->00000000 00000000 00000000 01111111 


bytes2int:

還原高位,即向左移動。0xff:二進位制:11111111

如果 i=0, 最高位 bytes[i] & 0xff 僅僅保留 8位, 再((bytes[i] & 0xff) << (8 * 3)) 左移動24位

01111111 -》01111111 00000000 00000000 00000000 

通過| 與運算  1|0 =1 0|0=0 1|1=1

val =0 二進位制 

00000000 00000000 00000000 00000000 

01111111 00000000 00000000 00000000 

通過與運算,輸出01111111 00000000 00000000 00000000 

  int val = 0;

     for (int i = 0; i < bytes.length; i++) {
       val = val | ((bytes[i] & 0xff) << (8 * (3 - i)));
     }



package com.john.netty.learn.ch08.test;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Arrays;


public class Test1 {


  public static void main(String[] args) throws IOException {


     int id = 123456789;
     int age = 21;


     System.out.println(Arrays.toString(int2bytes(id)));
     System.out.println(Arrays.toString(int2bytes(age)));


     System.out.println("id:" + bytes2int(int2bytes(id)));
     System.out.println("age:" + bytes2int(int2bytes(age)));
  }


  /**
   * 大端序列方法
   * 
   * @param val
   * @return
   */
  public static byte[] int2bytes(int val) {


     byte[] bytes = new byte[4];


     for (int i = 0; i < bytes.length; i++) {


       bytes[i] = (byte) ((val >> 8 * (3 - i)));
     }


     return bytes;
  }


  public static int bytes2int(byte[] bytes) {


     int val = 0;


     for (int i = 0; i < bytes.length; i++) {


       val = val | ((bytes[i] & 0xff) << (8 * (3 - i)));
     }


     return val;


  }
}
 

所有原始碼下載 :https://download.csdn.net/download/netcobol/10308871

相關推薦

Chapter 6 定義資料協議三講 通過大端序列方法4位元組int byte陣列

第一種方法: 通過大端序列方法將4個位元組int轉成 byte陣列大端序列方法:int2bytes:將int 從高到低位分別儲存到 byte[0] ~ byte[3]    byte[] bytes = new byte[4];     for (int i = 0; i &

Chapter 6 定義資料協議四講ByteBuffer 和 ChannelBuffers

ByteBuffer: 通過ByteBuffer 完成資料序列化,但是ByteBuffer.allocate(N) 必須提前設定ByteBuffer容量,無法擴容public static void m

Django 定義驗證規則和中間件

表達式 主動 mixin tex choice direct request lock test 一、Form基本使用 類 字段 is_valid() cleaned_data errors 字段參數: m

雲展網教程 | 如何儲存和應用定義模版主題付費使用者功能

付費使用者可以自定義模板內容,比如工具欄按鈕,工具欄色彩、背景圖片、背景音樂等。對於自定義的模板可以作為主題儲存下來,應用到另一本雜誌上哦。 個人專業版可以儲存1個主題,企業黃金版可以儲存3個,企業白金版儲存5個主題 儲存主題: 選擇基本的模板。如:經典演繹、精簡主義等模板

五章Spring表示式語言 之 5.4在Bean定義中使用EL—跟我學spring3

5.4.1  xml風格的配置        SpEL支援在Bean定義時注入,預設使用“#{SpEL表示式}”表示,其中“#root”根物件預設可以認為是ApplicationContext,只有ApplicationContext實現預設支援SpEL,獲取根物件屬

17篇通過fastjson去操作物件資料並處理json資料

package ivyy.taobao.com.entity; import java.io.Serializable; /** *@Author:liangjl *@Date:2014-12

python全棧開發Python常用模塊二(時間、random、os、sys和序列化)

utc時間 用戶 這也 文件名 password 如何 json字符串 並且 持久 一、time模塊 表示時間的三種方式:   時間戳:數字(計算機能認識的)   時間字符串:t=‘2012-12-12‘   結構化時間:time.struct_time(tm_year=2

MySQL數據庫學習(視圖、觸發器、事物)

註意 onf action 聲明 concat_ws base 循環 5-0 print 一、視圖 視圖是一個虛擬表(非真實存在),其本質是【根據SQL語句獲取動態的數據集,並為其命名】,用戶使用時只需使用【名稱】即可獲取結果集,可以將該結果集當做表來使用。 使用視圖我們可

web前端jQuery基本語法

== gre doctype color asc div .com nextall file 一、jQuery基礎1.為什麽要用jquery? 寫起來簡單,省事,開發效率高,兼容性好2、什麽是jQuery? jQuery是一個兼容多瀏覽器的JavaScript庫

Go語言:Go數據結構之:指針

如何 import 占位符 函數傳遞 markdown 數組 pack 它的 數據結構 Go語言指針 Go語言中指針是很容易學習的,Go語言中使用指針可以更簡單的執行一些任務。我們都知道變量是一種使用方便的占位符,用於引用計算機內存地址。Go語言的取地址符是 &,放

Python進階模塊(上)

path 變量 屬性 一個 第三方 sys pre 應用程序 bsp ·一、模塊 模塊就是一組功能的集合體,我們的程序可以導入模塊來復用模塊裏的功能。為了編寫可維護的代碼,我們把很多函數分組,分別放到不同的文件裏,這樣,每個文件包含的代碼就相對較少,很多編程語言都采用這種組

深入理解JVM虛擬機器讀書筆記早期(編譯期)優化

10.1 概述 10.2 Javac編譯器 10.2.1 Javac的原始碼與除錯 10.2.2 解析與填充符號表 10.2.3 註解處理器 10.2.4 語義分析與

九章 Spring的事務 之 9.4 宣告式事務

9.4.1  宣告式事務概述        從上節程式設計式實現事務管理可以深刻體會到程式設計式事務的痛苦,即使通過代理配置方式也是不小的工作量。        本節將介紹宣告式事務支援,使用該方式後最大的獲益是簡單,事務管理不再是令人痛苦的,而且此方式屬於無侵入式,對業

Tomcat入門

servle ogl pwd a* shutdown all 說過 ant 查看 目錄 1、Tomcat介紹 2、Tomcat安裝部署和配置 (1)tomcat下載和解壓

七天 定義資料型別&ArrayList集合悟空教程

第七天 自定義資料型別&ArrayList集合【悟空教程】 第07天 自定義資料型別、Arraylist集合 第1章 自定義資料型別 1.1 自定義資料型別概述 任何程式語言都需要將現實生活中的事物抽象成程式碼。這時可以使用自定義的資料型別(類)來描述(對

JSP六篇定義標簽之傳統標簽

abstract error 重寫 ren flush zhong pwrite out b2c 為什麽要使用自定義標簽? JSTL標簽庫只提供了簡單的輸出等功能,沒有實現任何的HTML代碼封裝,並且某些復雜類型轉換,或者邏輯處理的時候,JSTL標簽庫完成不了,需要自定義標

Django 九篇定義的分頁器組件

ota pen mod href render art 頁碼 .get led 一、分頁的實現與使用 class Pagination(object): """ 自定義分頁 """ def __init__(self,current_pa

C語言typedef(定義資料型別)與#define(巨集定義)用法比較

  不管是在C語言還是在C++中,typedef這個詞都不少見,當然出現頻率較高的還是在C程式碼中。typedef和#define有些相似,但更多的是不同,特別是在一些複雜的用法上,就完全不同了。      1.巨集定義(#define)      巨集定義又稱為巨集代換

五篇Qt學習與使用---定義的圖片輪播類(滾動播放圖片)

1、目標 編寫一個類,可以展示幾張圖片。類似於現在流行的視訊播放器的首頁中出現的滾動展示的控制元件。   2、 具體要求 (1)一次性展示三張圖片,左中右。中間的圖片至於頂部,旁邊的圖片被覆蓋,只露出一部分。 (2) 切換圖片的時候,呈現動態效果,需要有一個移動的過程。

Netty - 粘包分包以及定義資料協議

1.粘包和分包 這裡簡單介紹一下粘包和分包的概念,比如我們需要傳遞這串資料give me a coffee give me a tea,最後接收到的資料可能是give me a coffeegive me a tea(粘包現象),也可能是give me a coffeegive