判斷.net中在windows系統下的位元組序

来源:http://www.cnblogs.com/jidanfan/archive/2016/04/07/5364766.html
-Advertisement-
Play Games

位元組序,是指位元組在記憶體中的存儲順序。其又分為大端位元組(Big-Endian)序和小端位元組序(Little-Endian)。 以下摘自百度百科: a) Little-Endian就是低位位元組排放在記憶體的低地址端,高位位元組排放在記憶體的高地址端。 b) Big-Endian就是高位位元組排放在記憶體的低地址端 ...


  位元組序,是指位元組在記憶體中的存儲順序。其又分為大端位元組(Big-Endian)序和小端位元組序(Little-Endian)。

  以下摘自百度百科:

  a) Little-Endian就是低位位元組排放在記憶體的低地址端,高位位元組排放在記憶體的高地址端。

  b) Big-Endian就是高位位元組排放在記憶體的低地址端,低位位元組排放在記憶體的高地址端。

  什麼意思呢?

  我們有一個int32的值:16909060,它的二進位表示方式是:0000 0001,0000 0010,0000 0011,0000 0100 (為了方便觀看,我加了','號)

  那麼,在記憶體中我們需要4個位元組來保存這個整型數值。假設需要的記憶體地址為:0x00000001,0x00000002,0x00000003,0x00000004

  對於小端位元組序,它的存放順序為:

 

0x00000001 0x00000002 0x00000003 0x00000004
0000 0100 0000 0011 0000 0010 0000 0001

  對於大端位元組序,它的存放順序為:

0x00000001 0x00000002 0x00000003 0x00000004
0000 0001 0000 0010 0000 0011 0000 1000

  那麼,在.net中是採用哪種位元組序呢?

  先下結論:.net在記憶體中採用的是Little-Endian。 

  測試原理:利用 Buffer.BlockCopy 方法將一個int32位的值複製到int16值中。 Buffer.BlockCopy  方法將指定的count個數組從src複製到dst,並能指定開始複製的偏移位置。BlockCopy 方法使用記憶體的偏移量訪問 src 參數數組中的位元組,而不是使用索引或數組上下限等編程構造。註意,是記憶體的偏移量,即該方法是從記憶體中一個一個位元組的複製值,而不是直接複製數值結構

  以下是源代碼:

 1           var sours = new int[] { 175 };
 2             var dest = new short[1];
 3             var sp = 0; //源序列偏移地址
 4             var dp = 0; //目標位置偏移地址
 5             var count = 2; //一次拷貝位元組數
 6 
 7             Buffer.BlockCopy(sours, sp, dest, dp, count);
 8             foreach (var i in dest)
 9             {
10                 Console.WriteLine(i);
11             }    

  結果輸出:175.

  代碼里一次複製2個位元組,整好是一個int16所需要的位元組大小。而源數組的起始偏移量是0.如果我們把sp的值改成2,即偏移2個位元組,最後的輸出就變成了0.這是因為175的高位位元組是0000 0000,0000 0000,他存放在記憶體的高地址中。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 研究ing 待續。。。 ...
  • 前言 本文主要來學習記錄前三個建議。 建議1、正確操作字元串 建議2、使用預設轉型方法 建議3、區別對待強制轉換與as和is 其中有很多需要理解的東西,有些地方可能理解的不太到位,還望指正。 建議1、正確操作字元串 字元串應該是所有編程語言中使用最頻繁的一種基礎數據類型。如果使用不慎,我們就會為一次 ...
  • 前段時間遇到了需要禁用刷新的需求,f5按鈕就不說了,簡單的js就能把它禁用,但是工具條上的刷新按鈕卻傻傻乾不掉。 如果簡單的在刷新時重新載入畫面,通過window.location.href="url"可以很容易的實現,但是需求是要求在刷新時什麼都不做,保留畫面的狀態,這下子可就複雜化了。 asp. ...
  • Sql Server清理緩存代碼 需要較高級別的許可權 該代碼只有在登錄sql server的用戶名具有sysadmin許可權的時候才可以使用 設置的方式:安全性=》登錄名=》登錄名右鍵=》屬性=》伺服器角色=》選項(sysadmin)=》確定 之後,代碼在代碼裡面也可以執行了! ...
  • 1.模型建立,在模型上類上添加System.ComponentModel.DataAnnotations驗證屬性 ~~~C public class Product { public int Id { get; set; } [Required] public string Name { get; ...
  • 這個問題答案選至《C#入門經典》 如果方法具有返回類型,那就可以作為表達式的一部分: x=Manipulate(y,z); 如果沒有給部分方法提供實現代碼,編譯器就會在使用該方法的所有地方刪除該方法。在上面的代碼中,這會使x的結果變得模糊,因為Manipulate()方法沒有替代方法,如果沒有這個方 ...
  • 在UWP中引入了漢堡菜單,我們先看下效果圖 菜單項 XAML 添加菜單項數據源 漢堡按鈕切換SplitView收起摺疊狀態 SplitView常用屬性 CompactPaneLength 設置SplitView收起的長度 OpenPaneLength 設置SplitView打開的長度 Display ...
  • using System; using System.Collections.Generic; using System.IO; using System.IO.Compression; using System.Linq; using System.Net; using System.Reflec... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...