IIRC от C, вы можете иметь заявление по этим направлениям:Форсировать уровень памяти отливать
char* str = "1234";
int nonStr = *((int*)str);
(я намеренно сделал строку 4-х символов, так в среднем сценарии он будет иметь такое же количество байтов, как целое число.) Это приведет к разыменованию памяти, в которой хранится str
, и даст вам значение, если оно было целым числом (522207554
, если я сделал правильное преобразование).
Есть ли способ сделать то же самое в C#? Я знаю, что это операция с низким уровнем памяти, которая, как правило, блаженно скрыта от программиста на C#, я делаю это только для обучения.
A 'учение' упражнения! Конечно, мы хотим поощрять хорошие привычки, а не злоупотреблять указателями вроде этого - особенно на C#. Если вы хотите научить злоупотребления указателями, по крайней мере, это сделать в подходящем контексте - C/C++ в среде с низким уровнем/ОС. Не C#. – Skizz
Возможный дубликат [.NET String to byte Array C#] (http://stackoverflow.com/questions/472906/net-string-to-byte-array-c-sharp) –
@ Сциблируйте все, что злоупотребляет ими, «указать», что их можно злоупотреблять, даже случайно. Я хочу объяснить, что происходит в памяти за кулисами, чтобы ученики поняли, почему они получают «InvalidCastException»! Я не собираюсь научить их когда-либо писать «настоящие» программы таким образом. –