c#将任何类型转换为二进制形式的字符串或整数数组
计算机上的每一个数据都是0和1,即使这些数据代表了其他的东西,但在最小的尺度下,它是0和1。如何将任何类型转换为二进制字符串?或者是一个整数数组,每个整数值要么是1,要么是0,其他什么都不是。一般的问题在C#中无法解决,因为在C#中,您无法直接读取引用类型的内存(甚至无法读取引用的内存以查看它“指向”的位置) 您可以读取的是基本类型的内存表示(即c#将任何类型转换为二进制形式的字符串或整数数组,c#,C#,计算机上的每一个数据都是0和1,即使这些数据代表了其他的东西,但在最小的尺度下,它是0和1。如何将任何类型转换为二进制字符串?或者是一个整数数组,每个整数值要么是1,要么是0,其他什么都不是。一般的问题在C#中无法解决,因为在C#中,您无法直接读取引用类型的内存(甚至无法读取引用的内存以查看它“指向”的位置) 您可以读取的是基本类型的内存表示(即Boolean,Byte,SByte,Int16,UInt16,Int32,UInt32,Int64,UInt64,IntPtr,uintpr在引用类型
Boolean
,Byte
,SByte
,Int16
,UInt16
,Int32
,UInt32
,Int64
,UInt64
,IntPtr
,uintpr在引用类型中。例如,您无法“看到”字符串或int[]
的隐藏字段,甚至读取复杂值类型(struct
)的内存也可能很复杂
对于我列出的基本类型(不包括IntPtr
和UIntPr
),您可以
对于IntPtr
和UIntPtr
,如果进程为32位,则必须首先将其向下转换为Int32
/UInt32
,如果进程为64位,则必须将其向下转换为Int64
作为旁注,我并不完全清楚字节的位应该按什么顺序打印。我读到“通常”,在little-endian系统(使用英特尔处理器的PC)上,位顺序与字节顺序相同。我没有在代码中计算这一点,因此英特尔上的(int)1
是
00000001 00000000 00000000 00000000
因此,我以字节的大端顺序打印位,并在内存中打印值类型的字节(通常在英特尔的小端上)看看这里,到目前为止,你自己做了哪些尝试?遇到了什么问题?你研究了什么?一般的问题在.NET中是无法解决的,因为在.NET中,你不能直接读取对象的内存。你可以读取基元类型、字符串和其他一些类型的内存,但你不能查看inner <代码> new int(5)< /代码>如果你能做到这一点,它会帮助你做什么?如果你正在寻找序列化,那就是要搜索的单词,你需要考虑在序列化和反序列化之间有什么关系(关于它们在过程/机器边界和时间上的分离)。@Damien_不信者不,我不是在寻找序列化,我只是在寻找这个问题的具体答案。它会对我有什么帮助?很多,在这里解释太久了,所以让我们假设这是我的秘密。
不安全
?显然不安全,但在当前的实现中,托管引用不是黑盒。我与一般观点有点无关的倒立
00000001 00000000 00000000 00000000