Tuesday 19 December 2017

Little endian binära alternativ


Windows på IntelAMD är också liten endian, så ingen endianhetskonvertering krävs. Nu om du kan visa den specifika posten och där du får binär data, blir det lättare att svara. Du kan läsa vilken typ av post som helst från en fil. Om din post är förklarad så att den har exakt samma layout som binärdata kan du läsa en hel post på en gång. Om inte, måste du läsa varje fält separat. I allmänhet kan du läsa poster, eller enskilda fält i en post, från en ström med hjälp av Om din data kommer från ett TCP-uttag, kan du till exempel skriva det i en TMemoryStream, som byte. Då kan du återställa pekaren av strömmen till början och läsa data som visas. Som David kommenterade, om byte kommer över TCP-anslutningen i nätverksbytesorder, är det vettigt att köra varje fält genom en av WinSock-funktionerna ntohs () eller ntohl (). Efter allt ovan, men innan posterna i posten används. ntohs () konverterar 2 byte typer, medan ntohl () konverterar 4 byte typer. Om du vill skicka objekt använder du omvänd funktionerna htons () och htonl () på varje post i posten innan du skickar dem (separat). FWIW, det är ganska enkelt, i Win32, att ändra endianness med: Jag behöver skicka meddelande från Windows-server till HP-server till TCPIP-uttag. Jag använder Framework 4.0 med Visual Studio 2012. Jag slår på att konvertera lite till stor endian. Jag lagrar alla värden som måste skickas till den andra maskinen i en struktur och konvertera sedan strukturen till en byte array. Denna byte-matris skickas sedan via uttaget. Det finns flera meddelandestrukturer som detta och vi har utvecklat det helt. Nu sägs det att det andra systemet är HP-server och vi måste konvertera till Big Endian innan vi skickar det och konvertera även Big Endian till Little Endian efter att vi fått data. Finns det något enkelt sätt att konvertera detta i strukturformuläret Strukturen som jag har: Den kod som jag använder för att konvertera en struktur till ett byte-array: I den nedanstående koden innehåller variabeln quotmessagequot ACMMessage Structure och byteArray returneras tillbaka. Sedan skickas byteArray via TCPIP-uttaget. CopyStartIndex kommer alltid att vara 0 i det här fallet. I denna typ av utveckling hur ska jag konvertera från kull till big endian och vice versa tisdag 30 september 2014 09:56 Om det är ett enda fält som dubbel eller sträng eller heltal så fungerar det som du sa. Men jag arbetar med en struktur. Det spelar ingen roll om. du vet hur många byte det tar att representera varje fält i strukturen, vilket bestäms av datatypen för de flesta av dina fält och av den angivna storleken konstant för strängen. Du vet också att varje fältdata finns i den deklarerade ordern eftersom du angav sekventiell layout. Så använd antingen den föreslagna metoden för att vända ett byte-array och konvertera varje delbit av det totala byte-arrayet enligt varje fältstorlek. Med tanke på det här exemplet layout: Du borde kunna använda en rutin något så här: Reed Kimble - quot När du gör saker rätt, kommer folk inte vara säker på att du har gjort någonting alls. Föreslagna som svar av dbasnett onsdag 01 oktober 2014 10:53 Markerad som svar av Carl Cai Moderator Tisdag 07 oktober 2014 06:02 Tisdag 30 september 2014 17:11 Jag tycker att din struktur är för stor. Du kan överväga att konvertera den till en klass med egenskaper och lägga till koden som du söker efter den klassen. Jag förutser två metoder som varje gång returnerar en byte array, ToBigEndian och ToLittleEndian. Kanske bör du förklara hur du konverterar din upplagda struktur till en quotbyte arrayquot. Markera de bästa svaren som svar. quotFooling datorer sedan 1971.quot tisdag 30 september 2014 12:21 Om det är ett enda fält som dubbel eller sträng eller heltal så fungerar det som du sa. Men jag arbetar med en struktur. Tisdag den 30 september 2014 14:07 Jag har cirka 40 olika strukturer. Att konvertera alla dessa skulle vara ett stort jobb. I min fråga är koden för att konvertera strukturen till byte-matrisen angiven. Under alla omständigheter klistras det här igen. Redigerad av Perichiappan Lakshmanan Tisdag 30 september 2014 14:09 Tisdag 30 september 2014 02:08 Du returnerar en byte array av ref så kommer min kod inte att fungera om den sätts i slutet av funktionen tisdag september 30, 2014 2:29 PM Om det är ett enda fält som dubbel eller sträng eller heltal så fungerar det som du sa. Men jag arbetar med en struktur. Det spelar ingen roll om. du vet hur många byte det tar att representera varje fält i strukturen, vilket bestäms av datatypen för de flesta av dina fält och av den angivna storleken konstant för strängen. Du vet också att varje fältdata finns i den deklarerade ordern eftersom du angav sekventiell layout. Så använd antingen den föreslagna metoden för att vända ett byte-array och konvertera varje delbit av det totala byte-arrayet enligt varje fältstorlek. Med tanke på det här exemplet layout: Du borde kunna använda en rutin något så här: Reed Kimble - quot När du gör saker rätt, kommer folk inte vara säker på att du har gjort någonting alls. Föreslagna som svar av dbasnett onsdag 01 oktober 2014 10:53 Markerad som svar av Carl Cai Moderator Tisdag 07 oktober 2014 06:02 Tisdag 30 september 2014 05:11 ltquotegt vi måste konvertera till Big Endian innan du skickar den och konvertera även Big Endian till Little Endian efter att vi fått uppgifterna. ltquotegt Varför behöver du konvertera den till big endian medan du är i transit Är något i transit som ska behöva läsa dessa data eller förstå det Vänligen förlåt om detta visar min fullständiga okunnighet om detta ämne. Leon Stanley - Betala inte färjan - tills han får dig över till den andra sidan. um. Jag tillämpar detta på företag - inte till Gud. Redigerad av LeonCS Onsdag 01 oktober 2014 09:24 Onsdag 01 oktober 2014 09:15 Microsoft genomför en online-undersökning för att förstå din åsikt på Msdn-webbplatsen. Om du väljer att delta, kommer onlineundersökningen att presenteras för dig när du lämnar Msdn-webbplatsen. Vill du delta? Hänga Endian-formuläret för binära numeriska data Detta exempel visar hur man konverterar binär numerisk data till en endform som en applikation som inte skapats med LabVIEW kan läsa. LabVIEW lagrar siffror i big endian form, med den mest betydande byten först i minnet. Mac - och Sun-applikationer brukar förvänta sig att data är av stor endian form, men Windows-applikationer brukar förvänta sig små endianer, med minst signifikanta byte först. Som en följd, för en Windows-applikation som kräver liten endianform måste du uttryckligen byta byte i varje nummer efter att du har plattat eller innan du utplattar data. Om en Windows-applikation kräver binära data med små endianer, måste du byta den första byte med den andra byten i varje nummer innan du skriver data.160 Exemplet VI (bifogat) visar fem olika metoder för att konvertera data från stor - endian till liten endian form, eller vice versa. Not 160 Floating Point-nummer i LabVIEW är IEEE-kompatibla, och målprogrammet måste kunna läsa sådana nummer. Enkelt - och dubbel-precisions flytande punktnummer formateras typiskt på lämpligt sätt, men fördröjda precisionsnummer, för vilka det finns flera format i bruk, kanske inte är. Se applikationsnoten om LabVIEW-datalagring (länkad nedan) för mer information om endianer. LabVIEW 7.1 och tidigare När du ändrar endianformen av data, använd inte funktionen för LabVIEW Write File-funktionen som automatiskt skriver en filhuvud. Denna rubrik är alltid av big endian form. Istället, om du behöver en storleksrubrik, skriver du det explicit innan du skriver data till filen. Du måste veta formatet som målprogrammet förväntar sig. Till exempel, medan en applikation kanske känner igen en fil som skapats med Write to I16-filen eller Skriv till SGL-filfunktioner med eller utan bytebyte, kan det förvänta sig en typ av rubrik som dessa VIs inte tillhandahåller. När du vet exakt vilket format programmet förväntar sig, använd lämpliga funktioner i LabVIEW för att skapa en sådan fil. Jag öppnade detta i Labview 7.1 utan några problem. Byta endianess av blandade datatyper. - 11.12.2013 Av Dave Taylor, Hach Company. Metoderna som beskrivs i exemplet vi är användbara om du byter enskilda objekt eller arrays av en enda typ. Men om du behöver byta en blandad datatyp, som ett kluster, blir det extremt clunky. Ett sätt att hantera detta (vilket är säkert inelegant men en mycket snabbare och automatisk) är att skriva klustret till en binär fil med stor endian och sedan läsa den binära baksidan som liten endian. För att se effekten av denna process, skriv in ditt ingångskluster till en array av U8, gör sedan samma sak med de data du läser tillbaka från den lilla endianen. Du ser att alla datatyper med flera byte har bytts ut. Av Nstor Uribe Patarroyo, INTA. Det nedladdningsbara exemplet sparas med Labview 8.1 och kan därför inte öppnas med tidigare versioner. Oförenligt Exempel - 08.06.2006 Av Steve D, Smiths Aerospace. Det nedladdningsbara exemplet fungerar inte (kan inte ens visas) med antingen Labview 8.0 eller 7.1.Byte Order I databehandling används två grundläggande representationskoder: Little-Endian och Big-Endian. I lilla endianprogrammet lagras multi-byte-värden med början från minst signifikanta byte till de flesta och vice versa i big-endian-systemet. Till exempel lagras dubbelvärdet 0x12345678 av en liten endian dator som: Och av bigendian-dator som: x86 och x64-processorer använder lindendisk kodning, medan andra processorer från Motorolla och IBM använder bigendian-kodning. Hex Editor Neo låter dig ändra byte ordning för varje redigeringsfönster individuellt. Observera att alla ändringar kommer att vara synliga endast i ord, dubbla ord och quad words visa typer. Alternativet Default byte-order på sidan Allmänna inställningar används för att ställa in standard byte-order för nyöppnade redigeringsfönster. För att ändra en byteordning för det öppnade fönstret, använd de kommandon som finns i menyn Visa byte ordning. Som standard är CtrlE-tangentkombinationen bunden till kommandot View Byte Order Little-Endian, medan CtrlShiftE-tangentkombinationen är bunden till kommandot Visa Byte Order Big-Endian. Effekt på floating-point-typer Floating-point-standard (IEEE 754) definierar inte exakt kodning av flytande punktdatatyper på småändiga och bigendian-datorer. Enligt standarden bör kodningen inte påverkas av byteorderbyte, även om byte av flytande punkttyper faktiskt byts ut på flera big-endian-plattformar. Hex Editor Neo stöder scenarier, där floating-point-typer inte påverkas av storendia-byte-order, och där floating-point-typer påverkas av byteorderändringen. Byte-orderändringen påverkar alternativet flytande punkttyper på sidan Allmänna inställningar kontrollerar detta. Det här alternativet är som standard PÅ. Data Inspector och Structure Viewer Data Inspector och Structure Viewer-moduler tar också hänsyn till den nuvarande Windows byte-ordningen när de visar och bearbetar data. Copyright 2014 HHD Software. Alla rättigheter förbehållna.

No comments:

Post a Comment