TGViewer
Лаборатория Лиса Лаборатория Лиса @foxfoxcsharp · 79 subscribers
Post #129 188
В C можно перезаписывать память поверх любого типа!

Недавно открыл для себя union в C и немного опешил от возможностей!
Это как хакинг памяти на легальных основаниях
Что такое union?
Это структура, где все поля используют ОДНУ И ТУ ЖЕ память. Записал в одно поле - читай из другого, но интерпретация битов будет другой!

#include <stdio.h>
#include <stdint.h>

union WTF {
int32_t integer;
float real;
uint8_t bytes[4];
};

void print_bits(uint32_t x) {
for (int i = 31; i >= 0; i--) {
printf("%d", (x >> i) & 1);
if (i % 8 == 0) printf(" ");
}
}

int main() {
union WTF data;

// Пробуем число 42
data.integer = 42;

printf("Integer: %d\n", data.integer); // 42
printf("Float: %f\n", data.real); // ❌ НЕ 42.0!
printf("Биты: ");
print_bits(data.integer);
printf("\n\n");

// А теперь правильно
data.real = 42.0f;

printf("Float: %f\n", data.real); // 42.0
printf("Integer: %d\n", data.integer); // ❌ НЕ 42!
printf("Биты: ");
print_bits(data.integer);
printf("\n");

return 0;
}


Вывод:
Integer: 42
Float: 0.000000
Биты: 00000000 00000000 00000000 00101010

Float: 42.000000
Integer: 1109917696
Биты: 01000010 00101000 00000000 00000000

union выделяет память под самый большой тип (здесь 4 байта)
Все поля (integer, real, bytes) указывают на одну область памяти
Когда пишешь в одно поле - перезаписываешь память для всех!
Тип определяет только КАК интерпретировать биты

Это не безопасное преобразование типов!
Это прямое манипулирование битами в памяти.

Кстати, в C# в unsafe коде тоже можно провернуть что то подобное!
[StructLayout(LayoutKind.Explicit)]
public struct MemoryHack
{
[FieldOffset(0)]
public int Integer;

[FieldOffset(0)]
public float Real;

[FieldOffset(0)]
public byte Byte0;

[FieldOffset(1)]
public byte Byte1;
}

Но имеет ограничения.
  • ❤‍🔥 3
More from @foxfoxcsharp
  1. Oct 2, 2026Ща на меня нашла мысль, она довольно очевидная, но пока ее не придумаешь, она не очевидная…
  2. Oct 2, 2026После большой волны блокировок и замедлений ВПН мой выжил. Пока живет. Сейчас у меня кажды…
  3. Sep 23, 2026Я только сейчас заметил одну прикольную странность, у меня моделька серверного шкафа буква…
  4. Sep 22, 2026Channel photo updated
  5. Sep 21, 2026Я уже давно рассматриваю Keycloak для своего маленького сервиса. Но все руки не доходили д…
  6. Sep 18, 2026Мне понравился Дали с его жидкими часами =D
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →