Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#将任何类型转换为二进制形式的字符串或整数数组_C# - Fatal编程技术网

c#将任何类型转换为二进制形式的字符串或整数数组

c#将任何类型转换为二进制形式的字符串或整数数组,c#,C#,计算机上的每一个数据都是0和1,即使这些数据代表了其他的东西,但在最小的尺度下,它是0和1。如何将任何类型转换为二进制字符串?或者是一个整数数组,每个整数值要么是1,要么是0,其他什么都不是。一般的问题在C#中无法解决,因为在C#中,您无法直接读取引用类型的内存(甚至无法读取引用的内存以查看它“指向”的位置) 您可以读取的是基本类型的内存表示(即Boolean,Byte,SByte,Int16,UInt16,Int32,UInt32,Int64,UInt64,IntPtr,uintpr在引用类型

计算机上的每一个数据都是0和1,即使这些数据代表了其他的东西,但在最小的尺度下,它是0和1。如何将任何类型转换为二进制字符串?或者是一个整数数组,每个整数值要么是1,要么是0,其他什么都不是。

一般的问题在C#中无法解决,因为在C#中,您无法直接读取引用类型的内存(甚至无法读取引用的内存以查看它“指向”的位置)

您可以读取的是基本类型的内存表示(即
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