F#: Olika typer till en byte[]?

Permalänk
Medlem

F#: Olika typer till en byte[]?

Hej!

Jag har en byte array (byte[]) som jag skulle vilja lägga till lite olika typer till. Jag skulle vilja göra något i stil med:

byteArray <- 0x60 // byte byteArray <- 650 // uint16 byteArray <- "Ett namn" // string byteArray <- "Ett annat namn" // string byteArray <- 20.0 // float

Eller ännu hellre:

let byteArray : byte[] = [| 0x60 // byte 650 // uint16 "Ett namn" // string "Ett annat namn" // string 20.0 |] // float

Och så vidare. Jag vet att dessa exempel inte skulle fungera. Det jag undrar över är om det finns något elegant sätt att göra detta på?

Tackar så mycket på förhand.

Permalänk
Skrivet av Santrium:

Hej!

Jag har en byte array (byte[]) som jag skulle vilja lägga till lite olika typer till. Jag skulle vilja göra något i stil med:

byteArray <- 0x60 // byte byteArray <- 650 // uint16 byteArray <- "Ett namn" // string byteArray <- "Ett annat namn" // string byteArray <- 20.0 // float

Eller ännu hellre:

let byteArray : byte[] = [| 0x60 // byte 650 // uint16 "Ett namn" // string "Ett annat namn" // string 20.0 |] // float

Och så vidare. Jag vet att dessa exempel inte skulle fungera. Det jag undrar över är om det finns något elegant sätt att göra detta på?

Tackar så mycket på förhand.

Nu kan jag ingenting om F# men för att göra det du säger så antar jag att du måste explicit konvertera (ifall inte F# automagiskt gör det åt dig). Med hjälp av saker som System.Text.Encoding.ASCII.GetBytes("Ett namn")

Varför vill du göra detta? Kanske finns det något snyggare sätt att hantera ditt urprungliga problem?

Visa signatur

Avatarkreds till: http://imgur.com/HOxIL
Alakai säger: Ryssen skrattar. Norrland hembränner på uppdrag av regeringen. Sälar dör i blyförgiftning, fulla och glada. Förvirringen är total. Kungen är nöjd.

Permalänk
Medlem

Precis som ovanstående så kan jag inte F#, men det du vill göra låter lite konstigt. En uint16 är ju till exempel 2 bytes stor, vilket skulle innebära att den tog upp 2 platser i en bytearray. En sträng är ju ett okänt antal bytes. Antar att det är null-terminated strängar det handlar om och då är dom ju längd+1 bytes. För att det skulle gå att få ut information från en array igen skulle du ju behöva veta var varje objekt finns och hur stort det är och vad det är för typ, för att läsa ett antal bytes från rätt ställe och sedan konvertera det till rätt typ.

Nu kan jag inte F#, men det bygger väl på .net och objektorientering, i så fall skulle det kanske vara en lösning att ha en object-array istället? Då måste du i ditt exempel bara veta att plats 1 innehåller en byte och plats två innehåller en uint16 osv. för att kunna konvertera till rätt typ.

Permalänk
Medlem

Även jag är okunnig i F#, men om det går.. så hade jag lagt dina variabler i ett objekt och sen sparat en array av dom objekten. Fast det förutsätter ju att mönstret följs.

Visa signatur

WS: Asus P8Z77-I Deluxe mITX | Intel 3770K@4.6 | NH-U12P | Asus 780 GTX | Corsair 2x8GB 1600Mhz CL9 | Samsung 840 512GB | Ubuntu 16.04.3 x86_64 | Corsair AX750 | 2x Dell U2412M | Puppe.se | NAS: i7 860, 16GB DDR3, GA-P55M-UD4, FD Define R3, 8x2TB Samsung F4EG, Serveraid M1015, EVGA 750W G2 PSU, FreeBSD x64

Permalänk