Próbuję zrozumieć, jak działają struktury w SWIFT. Jestem pewny, jak .NET obsługuje je i jak to pakuje bajty do struktury itpUżywanie struktur (bajtów) z SWIFT - Struct do NSData i NSData do Struct
jestem znalezieniem trochę tajemniczości z następującego kodu:
struct exampleStruct {
var ModelNumber: Byte!
var MajorVersion: Byte!
var MinorVersion: Byte!
var Revision: Byte!
}
var myStruct = exampleStruct (
ModelNumber: 1,
MajorVersion: 2,
MinorVersion: 3,
Revision: 4
)
myStruct.MinorVersion // << Returns 3
// Struct to NSData.
var data = NSData(
bytes: &myStruct,
length: sizeof(exampleStruct)
)
println("data: \(data)")
W println Powroty: „Dane: < 01000200 03000400>”
spodziewałem dane faktycznie być:«dane: < 01020304>»
Każdy pomysł dlaczego SWIFT nie jest pakowania 1 bajt jako 1 bajt, zamiast to pakowanie bajt jako 2 bajty (1 bajt wartości i 1 bajt jako 00)?
Z drugiej strony, jeśli I wykonaj następujące czynności:
var newStruct = exampleStruct(ModelNumber: nil, MajorVersion: nil, MinorVersion: nil, Revision: nil)
var sendBytes:[Byte] = [0x1, 0x2, 0x3, 0x4]
var newData = NSData(bytes: sendBytes, length: sendBytes.count)
newData.getBytes(
&newStruct,
length: sizeof(exampleStruct)
)
newStruct.MinorVersion // << Returns nil
println(newData)
println (newData) jest prawidłowy i czego oczekuję wartości: < 01020304>
Jednak, kiedy dostęp do MinorVersion it zwraca zero, a nie to, czego oczekiwałem jako 3.
Czy istnieje sposób zmuszenia konstrukcji do przestrzegania upakowania bajta?
Dzięki! To działało i dziękuję za wyjaśnienie, ma to sens. – Mavro