java中bitconverter_BitConverter.GetBytes 方法以什么顺序返回字节数组

article/2025/11/7 16:36:11

前言

我在“浅谈 ZipInteger”一文中的 ZipInteger 结构中使用了 BitConverter 类的 GetBytes 方法。当时我是假设 GetBytes 方法根据 IsLittleEndian 的值不同而按照不同的顺序返回字节数组。但是 MSDN 有关 BitConverter 类的文档中没有对此作出明确的说明。请参见我在 MSDN 论坛的一个贴子“请问 BitConverter.GetBytes 方法以什么顺序返回字节数组”:

在 MSDN 文档的“BigInteger 构造函数 (Byte[])”中提到:

value 数组中的各个字节应该为 little-endian 顺序,从最低序位字节到最高序位字节。

将数值转换为字节数组的大多数方法,例如 BigInteger.ToByteArray 和 BitConverter.GetBytes,以 little-endian 顺序返回字节数组。

按照我的理解,该 MSDN 文档认为 BitConverter.GetBytes 方法总是以 little-endian 顺序返回字节数组,而不管 BitConverter.IsLittleEndian 的值如何。

而在 BitConverter 类的文档中并没有明确指出 BitConverter.GetBytes 方法应该以什么顺序返回字节数组。

不知我的理解是否正确。

该贴子并没有得到靠谱的答复。

测试程序

那么,我们写个程序来测试一下吧。下面就是 BitConverterTester.cs:

using System;

namespace Skyiv.Tester

{

static class BitConverterTester

{

static void Main()

{

Console.WriteLine(" OS Version: " + Environment.OSVersion);

Console.WriteLine(" CLR Version: " + Environment.Version);

Console.WriteLine(" IsLittleEndian: " + BitConverter.IsLittleEndian);

long n = 0x1234567890ABCDEF;

double d = 1;

Console.WriteLine(n.ToString("X") + ": " + BitConverter.ToString(BitConverter.GetBytes(n)));

Console.WriteLine(d.ToString("F14") + ": " + BitConverter.ToString(BitConverter.GetBytes(d)));

}

}

}

这个程序在 Windows Server 2003 操作系统的 .NET Framework 4 环境下编译和运行:

C:\CS\BitConverterTester> csc BitConverterTester.cs

Microsoft(R) Visual C# 2010 编译器 4.0.30319.1 版

版权所有(C) Microsoft Corporation。保留所有权利。

C:\CS\BitConverterTester> BitConverterTester

OS Version: Microsoft Windows NT 5.2.3790 Service Pack 2

CLR Version: 4.0.30319.1

IsLittleEndian: True

1234567890ABCDEF: EF-CD-AB-90-78-56-34-12

1.00000000000000: 00-00-00-00-00-00-F0-3F

C:\CS\BitConverterTester>

在 Ubuntu 10.10 操作系统的 Mono 2.8.2 环境下编译和运行:

ben@ben-m4000t:~/work/BitConverterTester$ dmcs BitConverterTester.cs

ben@ben-m4000t:~/work/BitConverterTester$ mono28 BitConverterTester.exe

OS Version: Unix 2.6.35.24

CLR Version: 4.0.30319.1

IsLittleEndian: True

1234567890ABCDEF: EF-CD-AB-90-78-56-34-12

1.00000000000000: 00-00-00-00-00-00-F0-3F

ben@ben-m4000t:~/work/BitConverterTester$

这两次运行的结果都在预料之中,BitConverter 类的 GetBytes 方法以 Little-Endian 顺序返回字节数组。但是,在这两次运行中,IsLittleEndian 的值都为 True,所以还是没有解决我们的问题。

查看 Microsoft .NET Framework 4 中相关的源程序代码

9bb0496fcf9582552da02bf4b1ce3596.png

在 mscorlib.dll 的 System 命名空间下找到 BitConverter 类:

3b2c5721ccb56eb7debf3f6d3fe2a8c3.png

如上图如示,IsLittleEndian 是 BitConverter 类的静态只读字段。

508d038eadf168cdf7aa09ae51a58554.png

如上图所示,在 BitConverter 类的静态构造函数中,直接把 IsLittleEndian 这个静态只读字段的值赋值为 true。由于我没有 Microsoft 实现 BitConverter 类的 C# 源程序代码,不知道是 Microsoft 的 C# 源程序中就是直接这样写呢,还是实际上是有根据平台来判断的,但是 C# 编译器在具体平台上优化了这段代码。

cdcd8220b56ee4d20b18a32e52785cf8.png

如上图所示,GetBytes(Int64) 方法也非常简单,直接通过不安全的指针转换就得到了相应的字节数组。学过 C 语言中的朋友想必非常熟悉这种做法。这下清楚了,BitConverter 类的 GetBytes 方法是根据 IsLittleEndian 的值的不同按照不同顺序来返回字节数组的。MSDN 文档在“BigInteger 构造函数 (Byte[]) ”中的相关说法:“例如 BigInteger.ToByteArray 和 BitConverter.GetBytes,以 little-endian 顺序返回字节数组”是不正确的。

继续看下去:


http://chatgpt.dhexx.cn/article/Dbj7ADnA.shtml

相关文章

java Getbytes转中文,java new String getBytes 到底怎么转换字符集的问题

我们常常遇到字符集转换的问题。 我要说的当然不是网站中遇到的ISO8859-1的那个傻BUG。 实例: 目标,把一个UTF-8的中文字符串转化成GBK的字符串。 新建一个GBK的java项目。 也就是说*.java文件中的字符是用GBK字符集保存的。 在main中,建一个中文字符串,那么这个静态串就是…

java getbytes 乱码_深入解析java String中getBytes()的编码问题

Java服务器后台在和Android端App通信时,遇到了两端关于用MD5加密同一包含中文的字符串结果不一致的问题。 具体问题描述: Java服务器后台和Android端AS用了同一个MD5的工具类,且两边项目的默认编码都是UTF-8 ,加密纯英文数字的字符…

java getbytes 长度_JAVA中的getBytes()方法

在Java中,String的getBytes()方法是得到一个操作系统默认的编码格式的字节数组。这个表示在不同情况下,返回的东西不一样! String.getBytes(String decode)方法会根据指定的decode编码返回某字符串在该编码下的byte数组表示,如: Java代码 byte[] b_gbk = "深"…

getBytes方法

字符串中的字符变成一位一位的01比特流 一个英文字符占8比特,也就是一个字节 一个中文字符占24比特,也就是3个字节(其实不同编码方式,占几个字节不一样,我们这里采取的UTF-8编码方式,具体可以看下图&…

最全微信小程序源码项目开发代码合集

小程序源码是用PHP和Java编程语言编写的程序,可以包含在HTML页面中,就像图像包含在页面中一样。您在本教程中构建的应用程序向您展示了如何在IDE中构建和部署微信小程序源码。      源码:y.wxlbyx.icu      创建或导入Applet源文件  …

智慧外链微信小程序源码1.8版本

好不容易搞到的一套最新版的,又废了老大劲搭建了起来,想用于抖音跳转微信加好友使用,不知道是不是哪里没操作对,没达到想要的效果 现在分享出来给大家,人多力量大,跑起来的可以分享一下经验 前端、后端模块…

最新抓取微信小程序源码教程+附逆向工具WxappUnpacker

正文: 文章目录 前言一、工具准备(免费) 1 解密工具2 逆向工具二、解密小程序 1.确认小程序包位置2.打开一个小程序3.解密小程序包三、逆向小程序 1、检查nodejs2、安装依赖3、正式逆向 前言 想成为一名微信小程序的开发者,前端思路的学习…

云开发多功能工具箱微信小程序源码/带流量主微信小程序源码

☑️ 编号:ym398 ☑️ 品牌:无 ☑️ 语言:微信小程序 ☑️ 大小:2MB ☑️ 类型:云开发多功能工具箱 ☑️ 支持:微信小程序 🎉 欢迎关注(发消息才不限制),私信,领取 &…

2048微信小程序源码

2048微信小程序效果 布局页面 页面结构 <view class"action_cavas" bindtouchstart"tapStart" bindtouchmove"tapMove" bindtouchend"tapEnd"> <view class"score"><view class"title">2048<…

微信小程序源码获取(附工具的下载)

在很多时候我们需要对微信小程序的页面样式进行借鉴。所以我们需要对它进行反向破解。下面是反向破解的流程图 第一种是对微信电脑桌面小程序进行破解&#xff1a; 只要你登录电脑wx并使用过小程序&#xff0c;那么对应的路径下的WeChat Files\Applet下就会产生很多.wxapkg结…

微信小程序源码反编译

一、前言 我百度了各种关于小程序地反编译教程&#xff0c;但是感觉都不太适合像我这样地初学小白&#xff0c;踩了挺多坑。在这里把我重新简化好的&#xff0c;快速地获取一个微信小程序源码的方式记录下来。 二、简单聊一下xxxxx.wxapkg 先来想想一个很简单的问题&#xf…

一键生成动漫头像微信小程序源码

一键生成动漫头像微信小程序源码&#xff0c;只需要上传一张图片&#xff0c;即可在线由AI生成一张动漫头像&#xff0c;非常的Nice&#xff01; PS&#xff1a;使用国一个免费AI接口&#xff0c;不保证该接口能永久使用。 下载 https://pan.baidu.com/s/1P6yyjNdi1-HiLi7aMdnV…

1000个微信小程序源码分享

文章目录 微信小程序源代码获取开发账号注册 小程序部分源码展示程序展示 微信小程序 现在的微信小程序非常火爆&#xff0c;网上也有很多学习资源&#xff0c;但是源码资源还是很少的。其实在学习开发微信小程序的时候如果有源码可以供我们借鉴&#xff0c;学习效率也会成倍的…

2048小游戏微信小程序源码

哈喽&#xff01;大家好&#xff0c;我是HappyGirl快乐女孩&#xff0c;最爱海贼王&#x1f49e;&#x1f49e;&#x1f49e; 是一位爱好技术的【技术Fans】&#xff01;&#x1f61c;&#x1f61c;&#x1f61c; &#x1f49e;&#x1f49e;&#x1f49e; 如果有对技术感兴趣的…

发卡系统微信小程序源码

发卡系统微信小程序源码&#xff0c;带流量主广告。源码花钱买来的&#xff0c;已测试完美运行&#xff0c;搭建简单&#xff0c;功能完善。 可开流量主&#xff0c;看广告领取&#xff0c;也可以直接对接官方支付&#xff0c;非云开发。 下载&#xff1a; https://pan.baidu.c…

Github微信小程序源码

微信小程序开发目前可以说是非常火热的&#xff0c;很多小伙伴都在学习这方面的知识。本文将为大家带来众多微信小程序的实例源码&#xff0c;小伙伴们可以根据源码来进行进一步学习。 源码使用方法&#xff1a; 1、克隆项目代码到本地&#xff08;git应该都要会哈&#xff0…

天气微信小程序源码,附上线教程

博主之前发布过一篇文章&#xff0c;微信小程序源码合集500套。不少友友反馈很多都用不了&#xff0c;这里博主给大家道个歉&#xff0c;因为博主也是花钱网上收集到的源码&#xff0c;来给大家免费下载&#xff0c;内容之多也不可能一个个去测试它的可用性。而且博主发现很多对…

获取微信小程序源码教程

最近在研究微信小程序&#xff0c;网上很多的小程序都是可以借鉴的&#xff0c;那么如何获取源码就很重要了 目录 1.安装对应环境 &#xff08;Node,js&#xff09; 2.下载反编译脚本 3.下载安卓模拟器获取微信小程序反编译文件 4.反编译 1.安装对应环境 &#xff08;Node…

100个2022实用微信小程序源码分享

微信小程序 微信小程序已经火爆到人人开发&#xff0c;人人都是码农&#xff0c;网上也有很多学习资源&#xff0c;但是源码资源还是很少的。其实在学习开发微信小程序的时候如果有源码可以供我们借鉴&#xff0c;学习效率也会成倍的增加。 无论是前端开发&#xff0c;还是后端…

抓取微信小程序源码教程,扒微信小程序文件等

前言&#xff1a; 想成为一名微信小程序的开发者&#xff0c;前端思路的学习和安全意识是非常有必要的&#xff0c;故务必掌握小程序反编译技能。这里用到了2个工具《包解密》与《反编译》&#xff08;非原创&#xff0c;均来自网上的大佬&#xff09;&#xff0c;特别适合新手…