using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CSharp内功修炼
{
///
/// 测试int类型数据转字节数组
///
internal sealed class TestIntToByteArray
{
///
/// int类型数据转byte[]类型
///
///
///
public byte[] intToBytes(int value)
{
//一个字节占的位数8 目的 后面计算变量占多少字节用
int IntEight = 8;
//得到value变量的名称空间.类名 这里是System.Int32 目的就是要拿到32 其实就是32位二进制数
string typeName = value.GetType().ToString();
typeName = typeName.Split('.')[1]; //得到Int32字符串
for (int i = 0; i < typeName.Length; i++)
{
if (typeName[i] >= 'a' && typeName[i] <= 'z' || typeName[i] >= 'A' && typeName[i] <= 'Z')
{
//这个是当i索引对应的内容是字母 我们就直接简单粗暴给截当前i对应的内容
//这个会增加内存的频繁创建 建议你们用其他技术避免这个方式 比如正则表达式
typeName = typeName.Substring(i + 1); //为了拿到数字32
}
}
//得到变量的字节数量
int byteCount = Convert.ToInt32(typeName) / IntEight;
//开辟对应字节数量数组
byte[] intByteArray = new byte[byteCount];
for (int i = 0; i < byteCount; i++)
{
//注意右移动分别是0 8 16 24 依次拿到不同字节中的内容
//技能点 & 这个是针对二进制与操作 相同则为1 否则0 比如 1111 & 1000 =1000
intByteArray[i] = (byte)(value >> (i * 8) & 255);
}
Console.WriteLine("数据占的字节数:" + byteCount);
for (int i = 0; i < byteCount; i++)
{
//输出每个字节内容 仅仅为了测试 注意你把控制台输出代码注释掉就可以移植到unity 也可以用编译指令自动判断
Console.WriteLine(intByteArray[i]);
}
//返回给调用方一个字节数值
return intByteArray;
}
}
}
测试工作我就不做了,看到的朋友动手测试吧,我是测试通过了的,主要讲解思路** 不懂得朋友直接留言 看到了会详细讲解 为什么会去自己封装 我好像没有找到int 转byte[] 的底层api 不知道你们有发现的吗 可以留言下 类似的double 等其他类型转byte[] 方法可以复制粘贴 本打算用泛型 但是 >>这个运算符不支持T 就没有用了 你们可以改进下 或者换掉 >>