Я использую сетевую среду с открытым исходным кодом, которая позволяет разработчикам легко общаться через службу, обнаруженную с помощью Bonjour в Objective-C.
Есть несколько строк, которые заставили меня быть в восторге отНекоторое время назад, даже если кажется, что они никогда не вызывали каких-либо проблем на любых машинах, которые я тестировал, независимо от того, использую ли я 32-битную или 64-битную версию моего приложения:
int packetLength = [rawPacketData length];
[outgoingBuffer appendBytes:&packetLength length:sizeof(int)];
[outgoingBuffer appendData:rawPacketData];
[self writeToStream];
Обратите внимание, что первой отправляемой информацией является длина пакета данных, которая является довольно стандартной, а затем отправляются сами данные.Что пугает меня, так это длина длины .Будет ли одна машина когда-нибудь предполагать, что значение int равно 4 байтам, а другая машина считает, что значение int равно 8 байтам?
Если два размера могут быть разными на разных машинах, что может вызвать это?Зависит ли это от моего компилятора или от архитектуры компьютера конечного пользователя?И, наконец, если это проблема, как я могу взять 8-байтовое int и сократить его до 4-байтов, чтобы обеспечить обратную совместимость?(Поскольку мне никогда не потребуется больше 4 байтов для представления размера пакета данных.)