问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C#.NET byte[] 的一个小问题

发布网友 发布时间:2022-05-16 18:25

我来回答

4个回答

热心网友 时间:2023-12-10 14:00

给你2个方法,需要添加引用
using System.Runtime.InteropServices;
/// <summary>
/// 把任意类型数据按字节读取到byte[]
/// </summary>
/// <param name="sIn">该类型的一个实例</param>
/// <param name="nLen">该类型的长度</param>
/// <returns>字节流</returns>
public static byte[] ToByte(object sIn, int nLen)
{
IntPtr psIn = IntPtr.Zero;
byte[] buffer = new byte[nLen];
try
{
psIn = Marshal.AllocHGlobal(nLen);
Marshal.StructureToPtr(sIn, psIn, true);
Marshal.Copy(psIn, buffer, 0, nLen);
}
finally
{
if (psIn != IntPtr.Zero) Marshal.FreeHGlobal(psIn);
}
return buffer;
}
//将字节流转成指定类型
public static object ToObject(byte[] rawdatas, Type anytype)
{
int rawsize = Marshal.SizeOf(anytype);
if (rawsize > rawdatas.Length) return null;
IntPtr buffer = Marshal.AllocHGlobal(rawsize);//分配指定大小的内存,返回一个指针
Marshal.Copy(rawdatas, 0, buffer, rawsize);
object retobj = Marshal.PtrToStructure(buffer, anytype);
Marshal.FreeHGlobal(buffer);
return retobj;
}

例如用的时候:
long l = 888;
byte[] bb = ToByte(l,sizeof(long));//结果bb[0]=120;bb[1]=3,其它6位为0(我的机器是从低位读取的)
long l2 = (long)ToObject(bb, typeof(long));//结果l2=888;还原了

热心网友 时间:2023-12-10 14:00

在.net中类型转换的原则是小的可以转成大的(byte可以转成long),反过来则不行。
buffer.SetValue(l, 0); 做的事情是将long类型的l转换为byte类型,这个转换是不允许的。这个与l本身的大小没有关系。

Ps:楼上的,即使long l = 1; 依旧会报错。

热心网友 时间:2023-12-10 14:00

byte[] buffer = new byte[1024];
long l = 888;

String str = l.ToString();
for (int i = 0; i < str.Length; i++)
{
buffer[i] = (byte)str.ToCharArray()[i];

}

long l2 = Convert.ToInt64(Encoding.Default.GetString(buffer));
Console.WriteLine(l2);
Console.ReadLine();

热心网友 时间:2023-12-10 14:01

byte 0 到 255 无符号 8 位整数

你确想把888放到一个byte里,肯定不行啊
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
帮我把这段中文翻译成法语读一下 你好,很荣幸见到你,我是一名来自湖北武... QQ纯真数据库有什么用?怎么用?在线等! 内部控制评审的具体程序是什么呢? cng配件是什么意思? 新人求教,该大修呢还是换发动机 ...时间有一年了。而且偶尔恶心,有时肚子上部分发热。而且运动起来特别... 真我之境·无瑕回归怎么锻造 资格预审通过后,可否在开标时更换项目各岗位人员,具体说天津市的。 天津市政府令+项目经理要求 颐和园圆明园哪个好 如何把一个 Long 型转换成 Byte(0 to 3)? java 自动类型转换 java 变量数据类型转换?byte, short, char, int, long, float, double 女主现代重生小说有金手指宠文 java怎么把byte数组赋值给long数组? C#怎样将Byte[]转换成long 将16进制的Byte数组转换成Long(C++) 如何去除图片的水印标签? 怎么将 byte 转换为long 刑事诉讼法183条 《刑诉解释》第180条 刑事诉讼法182条 刑诉中的不予受理、终止审理和驳回起诉 刑事诉讼法司法解释第157条第181条 司法考试:刑诉抗诉问题 刑事诉讼法解释15和181条矛盾吗 刑事抗诉,以什么为标准 刑诉解释第15条与第181条矛盾 刑诉解释第15条规定:基层*对于可能判处无期徒刑,死刑的第一审 刑事诉讼中止审理的情形? 简答刑诉诉讼终止的条件 体验农家生活的作文可以写什么 在VB里面long型怎样转成byte[]型 VB 中如何将long型数组转化为byte型数组 周末带孩子出去摘果子,体验农家生活,有没有什么好的地方推荐一下? 英语翻译体验农家生活吃农家饭住农家院 VB byte 转 integer 想在宜昌体验农家生活,有什么推荐的地方? 游山西村从几个方面写农家生活体验? 写一篇有趣的农家生活的作文 与我的爱车东风风神AX7带两个小朋友去果园里体验农家生活! 寻一处宁静远离喧嚣,与海马8S享受静谧的田园时光 hm口红在哪个网站买 hm lanvin是什么 这次lavin for hm国内的店也有吗 有好的口红吗?卡姿兰口红会致癌? 太原市哪里做口红 忘记了手机号也不用了怎么办? 做口红微商,怎么发朋友圈 微商城世界名品蛋糕共有几款 大家好,我想做微信公众号卖生日蛋糕(同城配送),现有2个名字,大