C#中BitConverter.ToUInt16、BitConverter.ToUInt32原理与用法详解
2023-05-19 14:30:00 来源: 博客园
一、基础知识
a、1字节=8位(1Byte=8bit) 二进制表示:11111111 十进制表示:255
计算机内部约定用多少字节来规范数值,比如红绿蓝三色在计算机中只分配了一个字节,一个字节有八位,每一位只能储存1或0,计算机只认识二进制(0与1),所以就是2的八次方,计算机中约定从0开始计数,所以是0至255,长度是256.
(相关资料图)
8位 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
2的N次方 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
2^N的值(10进制整数值) | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
10进制最大数 | 255=128+64+32+16+8+4+2+1 | |||||||
10进制最小数 | 0 | |||||||
最大长度 | 256=0至255,也就是2的8次方 |
b、在16进制中,每位16进制占用4bit
十进制:255二进制:11111111 | ||
16进制,每位占用4bit | 1111 | 1111 |
16表进表示 | F | F |
二、在C#中,如何把二进制转换为10进制与16进度
十进制数5002
a、二制进值,输出:1001110001010
b、十六进制值,输出:138a
c、十六进制 to 十进制,输出5002
c、按位输出:[0]=138、[1]=19、[2]=0、[3]=0 注意:每位=8bit,4位一组,4*8=32位,二进制完整表示为:00000000 00000000 00010011 10001010
综上,先把5002按位输出,采用表格形式展现如下:
位顺序 | 第1位 (buffer[0]) | 第2位 (buffer[1]) | 第3位 (buffer[2]) | 第4位 (buffer[3]) |
十进制值 | 138 | 19 | 0 | 0 |
二进制 | 10001010 | 00010011 | 00000000 | 00000000 |
十六进制 | 8a | 13 | 0 | 0 |
----依据上面表格内容,逆向推演
十进制:第4位(buffer[3]) * 256 + 第3位(buffer[2]) * 256 + 第2位(buffer[1])*256 + 第1位(buffer[0]) = 0*256 + 0*256 + 19*256 + 138 = 5002
十六进制:倒序组合,0 0 13 8a =138a =5002 (注:组合顺序,从大至小,也就是 0 0 13 8a ,与计算机中数组表现顺序相反)
------------------------------------------------------------------------
正题:C#中BitConverter.ToUInt16原理与用法
byte[] buffer = { 138, 19 };
uint highValue = BitConverter.ToUInt16(buffer, 0); //输出5002
在内存中,数值型数据次序与数组是相反的,即低字节在前面,高字节在后面。
在内存中是(用 16 进制表示)8a ,13,当把这2个字节(从buffer字节数组下标为0开始)当成 int16 时,为 138a(十进制的 5002).
总结:也就是从数组中取下标为0以后的两个字节,先各字节转换为16进制,然后倒序组合,转换为10进制。
(十进制 -> 十六进制 -> 倒序 -> 十进制)
so:ToUInt16取2个字节,ToUInt32 取4个字节。ToUInt64 取8个字节,UInt表示无符号整数,无负数范围。
标签:
[责任编辑:]
猜你喜欢
- (2023-05-19)常德市西湖管理区党委副书记吉海波一行莅临绿之韵中心走访调研 全球速看
- (2023-05-19)湖人103-108掘金!谁注意詹姆斯赛后发言,一番话暗示浓眉哥_当前速读
- (2023-05-19)天天热推荐:蓝颜知己和红颜知己是什么意思
- (2023-05-19)天天简讯:中国星辰|闪亮的名字
- (2023-05-19)今日聚焦!邱县气象台发布大风蓝色预警【Ⅳ级/一般】【2023-05-19】
- (2023-05-19)上饶城控集团拟发行10亿元中期票据 期限5年 世界看热讯
- (2023-05-19)全球滚动:最高法:重点打击“老赖”通过假离婚 关联交易等方式提前转移财产