社区
C#
帖子详情
求助C#中 BitConverter.ToUInt16 的实现方法
CaptainSCH
2016-06-27 10:14:52
1、在从数组转换到 int16时 是有一个交换高低字节 的过程吗?
2、如果有源码的话~欢迎共享
3、现在24bit的int数组,可以怎样转换成int型? 我自己思考觉得可以通过填充高位,然后利用BitConverter.ToUInt32,可是具体怎样填,填什么还没想清楚。
...全文
605
8
打赏
收藏
求助C#中 BitConverter.ToUInt16 的实现方法
1、在从数组转换到 int16时 是有一个交换高低字节 的过程吗? 2、如果有源码的话~欢迎共享 3、现在24bit的int数组,可以怎样转换成int型? 我自己思考觉得可以通过填充高位,然后利用BitConverter.ToUInt32,可是具体怎样填,填什么还没想清楚。
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
8 条
回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
打赏红包
tcmakebest
2016-06-28
打赏
举报
回复
1、在从数组转换到 int16时 是有一个交换高低字节 的过程吗? 如果存储位置颠倒时需要交换 3、现在24bit的int数组,可以怎样转换成int型? 我自己思考觉得可以通过填充高位,然后利用BitConverter.ToUInt32,可是具体怎样填,填什么还没想清楚。 24bit的int数组,这是绕口令吗? 要考虑是否有符号位,如果无符号在高位补8个0, 如果有符号则最高位是几(0或1)就补8个几,再按照32位转换.
zhishiheng
2016-06-28
打赏
举报
回复
[SecuritySafeCritical, __DynamicallyInvokable]
public static unsafe short ToInt16(byte[] value, int startIndex)
{
if (value == null)
{
ThrowHelper.ThrowArgumentNullException(ExceptionArgument.value);
}
if (((ulong) startIndex) >= value.Length)
{
ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument.startIndex, ExceptionResource.ArgumentOutOfRange_Index);
}
if (startIndex > (value.Length - 2))
{
ThrowHelper.ThrowArgumentException(ExceptionResource.Arg_ArrayPlusOffTooSmall);
}
fixed (byte* numRef = &(value[startIndex]))
{
if ((startIndex % 2) == 0)
{
return *(((short*) numRef));
}
if (IsLittleEndian)
{
return (short) (numRef[0] | (numRef[1] << 8));
}
return (short) ((numRef[0] << 8) | numRef[1]);
}
}
zhishiheng
2016-06-28
打赏
举报
回复
[CLSCompliant(false), __DynamicallyInvokable]
public static ushort ToUInt16(byte[] value, int startIndex)
{
if (value == null)
{
ThrowHelper.ThrowArgumentNullException(ExceptionArgument.value);
}
if (((ulong) startIndex) >= value.Length)
{
ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument.startIndex, ExceptionResource.ArgumentOutOfRange_Index);
}
if (startIndex > (value.Length - 2))
{
ThrowHelper.ThrowArgumentException(ExceptionResource.Arg_ArrayPlusOffTooSmall);
}
return (ushort) ToInt16(value, startIndex);
}
slj311
2016-06-28
打赏
举报
回复
没有用过,不常用吧,什么地方用的
xuzuning
2016-06-28
打赏
举报
回复
24bit 是 3个字节,你去探究 BitConverter.ToUInt16 的算法实现是不对的,至少应该是 BitConverter.ToUInt32 才对 这个 3 byte 的数组,如果用补位法通过 BitConverter.ToUInt32 转换,需要根据用途考虑是补在前面还是补在后面 如果这个数组只是表示 RGB 三原色,那么宜用移位操作进行转换 如果这个数组表示的是 可变长度整数(xls、chm、mid 等中被广泛使用),那就需要去找库函数或自行编码解决了 总之,你得先弄清你这个数据的含义,然后才能找到合适的方法
threenewbee
2016-06-27
打赏
举报
回复
这个取决于你的计算机是大端序还是小端序。默认重载下直接复制内存,不需要交换。
wanghui0380
2016-06-27
打赏
举报
回复
这点其实在msdn对字节序的影响部分已经解释很清楚了 https://msdn.microsoft.com/zh-cn/library/system.bitconverter.aspx
wanghui0380
2016-06-27
打赏
举报
回复
1.这个取决于平台环境,通常net会自己判定 2.net源代码早就开源 3.无需你在去填充,net会自己填充和丢弃(超出部分丢弃,不足部分知道按平台字节序补足)
相关推荐
C#
中
BitConverter
.
ToUInt
16()和
BitConverter
.ToString()的简单使用
主要介绍了
C#
中
BitConverter
.
ToUInt
16()和
BitConverter
.ToString()的简单使用,文
中
通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
C#
中
BitConverter
.
ToUInt
16()和
BitConverter
.ToString()的简单使用
https://blog.csdn.net/u010683091/article/details/70332286 1.
BitConverter
.
ToUInt
16()的用法,是把两个字节转换为无符号整数,如:205 56 这两个字节的16进制是 CD 38 那么转为无符号整数 应该倒过来排 即 38CD 这个数转为无符号十进制整数就是 14541 2.
BitConverter
.To...
C#
变量内存拷贝
C#
short类型数据拷贝给ushort类型
方法
1:转成bytes数组后再转换过去 short bbb = -1000; ushort ccc = 0; byte[] srcbyte =
BitConverter
.GetBytes(bbb); ccc=
BitConverter
.
ToUInt
16(srcbyte,0);
方法
2:直接非托管内存拷贝 ushort[] srcbyte2=new ush
C#
float与UInt16互转
//float拆分成两个UInt16 public static UInt16 FloatToTwoUInt16(float f) { byte[] bs = BitConvert.GetBytes(); UInt16 low =
BitConverter
.
ToUInt
16(bs, 0); UInt16 high = BitConvert....
c#
数据byte转换int
今天在做上位机与PLC通信时,对方是协议将按照int16发数据给上位机,但是上位机接收到的是数据是高8位在前,低八位在后。而Csharp
中
BitConverter
.
toUint
16默认转换时,数据是低八位在前的,于是需要将这边的数据转换下。
C#
自带的
方法
对此是有处理的。对于整型、长整型等数据类型,
BitConverter
.Bigendian 认为第一个字节是最高位字节,
BitConverter
.IsLittleEndian认为第一个字节是最低位字节。 /// <summary> //.
发帖
C#
C#
.NET技术 C#
复制链接
扫一扫
10.8w+
社区成员
64.2w+
社区内容
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
帖子事件
创建了帖子
2016-06-27 10:14
社区公告
让您成为最强悍的C#开发者