Thursday 31 August 2017

C Printf Char Binära Alternativ


Skriv ut formaterad data till stdout Skriver C-strängen spetsad enligt formatet till standardutgången (stdout). Om formatet innehåller formatspecifikatorer (delsekvenser som börjar med) formateras de ytterligare argumenten som följer formatet och infogas i den resulterande strängen som ersätter deras respektive specifikationer. Parametrar formaterar C-sträng som innehåller texten som ska skrivas till stdout. Det kan eventuellt innehålla inbäddade formatspecifikatorer som ersätts av de värden som anges i efterföljande ytterligare argument och formateras som begärts. Där den specifierande karaktären i slutet är den viktigaste komponenten, eftersom den definierar typen och tolkningen av dess motsvarande argument: Signerat decimaltal Inte signerad decimaltal Inte signerad hexadecimalt heltal Ej signerad hexadecimalt heltal (storlek) Decimal flytpunkt, små bokstäver Decimal flytpunkt, stor bokstav Vetenskaplig notation (mantissaexponent), små bokstäver Scientific notation (mantissaexponent), storlek Använd kortaste representationen: e eller f Använd kortaste representationen: E eller F Hexadecimal flytpunkt, små bokstäver Hexadecimal flytpunkt, stor bokstav String av tecken Inget tryckt. Motsvarande argument måste vara en pekare till en signerad int. Antalet bokstäver hittills lagras i spetsen. En följd av ett annat tecken kommer att skriva en singel till strömmen. Formatspecifikationen kan också innehålla underspecifikatorer: flaggor. bredd . precision och modifierare (i den ordningen), vilka är frivilliga och följa dessa specifikationer: Vänsterjustera inom den angivna fältbredden. Rätt rättfärdighet är standardvärdet (se breddsunderspecifikationen). Krafter för att föregripa resultatet med ett plus - eller minustecken (eller -) även för positiva tal. Som standard förekommer endast negativa tal med a-tecken. Om inget tecken kommer att skrivas läggs ett tomt utrymme in före värdet. Används med o. x eller X specificerar värdet förbi med 0. 0x respektive 0X för värden som är olika än noll. Används med a. A. e. E. f. F. g eller G det tvingar den skriftliga utgången att innehålla en decimal, även om inga fler siffror följer. Som standard, om inga siffror följer, skrivs ingen decimalpunkt. Vänster-pads numret med nollor (0) istället för mellanslag när padding är specificerat (se breddsunderspecifikare). För integerspecifiers (d. I. O. U. X. X): precision anger minst antal siffror som ska skrivas. Om värdet som ska skrivas är kortare än detta nummer, är resultatet polstret med ledande nollor. Värdet avkortas inte, även om resultatet är längre. En precision på 0 betyder att inget tecken är skrivet för värdet 0. För en . A. e. E. f och F-specificatörer: detta är antalet siffror som ska skrivas ut efter decimalpunkten (som standard är detta 6). För g - och G-specificatorer: Det här är det maximala antalet signifikanta siffror som ska skrivas ut. För s. Detta är det högsta antalet tecken som ska skrivas ut. Som standard skrivs alla tecken ut tills det slutliga nollteckenet uppträder. Om perioden anges utan ett uttryckligt värde för precision. 0 antas. Precisionen är inte specificerad i formatsträngen, men som ett extra integervärdesargument som föregår det argument som måste formateras. Längdsunderspecifikationen ändrar längden på datatypen. Detta är ett diagram som visar vilka typer som används för att tolka motsvarande argument med och utan längdspecifika (om en annan typ används, utförs lämplig typpromotion eller omvandling, om det är tillåtet): Obs beträffande c-specifier: det tar en int eller wintt) som argument, men utför den rätta omvandlingen till ett char-värde (eller en wchart) innan du formaterar den för utmatning. Obs! Gula rader anger specificatorer och delspecifika som införts av C99. Se ltcinttypesgt för specifikatorerna för utökade typer. . (ytterligare argument) Beroende på formatsträngen kan funktionen förvänta sig en sekvens av ytterligare argument, var och en innehåller ett värde som ska användas för att ersätta ett formatspecifikare i formatsträngen (eller en pekare till en lagringsplats för n). Det ska finnas minst lika många av dessa argument som antalet värden som anges i formatspecifika-torerna. Ytterligare argument ignoreras av funktionen. Returvärde Efter framgång returneras det totala antalet tecknade tecken. Om ett skrivfel uppstår är felindikatorn (ferror) inställd och ett negativt tal returneras. Om ett multibyte teckenkodningsfel uppstår när du skriver stora tecken ställs errno på EILSEQ och ett negativt tal returneras. Kompatibilitet Särskilda biblioteksimplementeringar kan stödja ytterligare specifikationer och underspecifikatorer. De som listas här stöds av de senaste C och C-standarderna (båda publicerade 2011), men de i gul introducerades i C99 (krävs endast för C-implementeringar sedan C11) och får inte stödjas av bibliotek som uppfyller äldre standarder. sätter Skriv sträng till stdout (funktion) scanf Läs formaterad data från stdin (funktion) fprintf Skriv formaterad data för att strömma (funktion) fwrite Skriv block av data för att strömma (funktion) funktioner: makrokonstanter: Det finns ingen binär omvandlingsspecifika i glibc normalt . Det är möjligt att lägga till anpassade konverteringstyper till funktionen printf () av ​​funktioner i glibc. Se registertryckfunktion för detaljer. Du kan lägga till en anpassad b-konvertering för eget bruk, om det förenklar programkoden för att få den tillgänglig. Här är ett exempel på hur man implementerar ett anpassat printf-format i glibc. Också vad du talar om w. r.t. hantering av flera resultat i följd är inte reentrancy per se utan snarare en nedfall av att använda vad som uppgår till ett globalt objekt för att lagra resultatet. Funktionen återges inte igen. I C är det korrekta eller åtminstone ofta använda idiomet för att hantera funktioner som lagrar sina resultat i ett globalt objekt att kopiera dessa resultat omedelbart efter att de erhållits. Detta har den stora fördelen att om endast ett resultat krävs åt gången behöver ingen ytterligare tilldelning behövas. ndash Greg A. Woods Nov 27 12 på 0:51 Här kommer vi att behöva vara oense. Jag kan inte se hur att lägga till en diskret preprocessorsymbol kommer någonstans nära skadan att begränsa användningsfallen allvarligt, vilket gör gränssnittet felaktigt, reserverar permanent lagring under programmets varaktighet för ett temporärt värde och genererar sämre kod på de flesta moderna plattformar . ndash R .. Nov 27 12 på 1:53 Familjen printf () kan bara skriva ut i bas 8, 10 och 16 med standardspecifikationen direkt. Föreslå att du skapar en funktion som omvandlar numret till en sträng per kod speciella behov. Alla andra svar hittills har åtminstone en av dessa begränsningar. Använd statiskt minne för returbufferten. Detta begränsar antalet gånger som funktionen kan användas som argument för printf (). Tilldela minne som kräver uppringningskoden till lediga pekare. Kräver uppringningskoden för att uttryckligen tillhandahålla en lämplig buffert. Ring printf () direkt. Detta förpliktar en ny funktion för att fprintf (). sprintf (). vsprintf (). etc. Använd ett minskat antal heltal. Följande har ingen av ovanstående begränsningar. Det kräver C99 eller senare och användning av s. Det använder en sammansatt bokstavlig för att ge buffertutrymmet. Det har inga problem med flera samtal i en printf ().quot Jag måste bearbeta denna karaktär som ett binärt tal för att fastställa huruvida data har skadats under överföringsprocessen. Jag är inte säker på att jag förstår. Det ser ut som om du inte behöver visa den UCHAR som Binary eller Hex, men bara för att göra lite bitvis logisk operation och skift på den UCHAR. Något som att räkna antalet 1 bitar från den uchar till exempel: unsigned char c 93 int bittal 0 printf (quotbitcount: dnquot, bitcount) lördag 09 december 2006 21:11 Det är precis det jag letade efter (en bär ). Men med ett par justeringar till den kod du gav mig lyckas jag göra det utan signerad karaktär c 93 printf (ctxnn, c, c) om (c amp 128) Dj1 för (j0jlt8j) printf (d, Dj) söndag, december 10, 2006 2:20 PM Alla svar För hex format printf har x-formatspecifikationen som gör det här. För binär kan du använda itoa funktionen: unsigned char ch 934 några slumpmässiga unsigned char värde för att visa char text16 buffert att använda med itoa printf (quotxnquot. Ch) hex med x format specifier itoa (ch, text, 16) hex med hjälp av itoa med bas 16 printf (quotsnquot. Text) itoa (ch, text, 2) använder itoa med bas 2 printf (quotsnquot, text) lördag 09 december 2006 19:49 Tack för det snabba svaret Denna kod fungerar under normala omständigheter men i mitt specifika fall är UCHAR en del av ett meddelande som levereras av en UART, till vilken en dataström är ansluten till. Således måste jag bearbeta denna karaktär som ett binärt tal för att fastställa huruvida data har skadats under överföringsprocessen. Lördag 09 december 2006 20:42 Citat Jag måste bearbeta denna karaktär som ett binärt tal för att fastställa huruvida dataöverföringen har skadats under överföringsprocessen. Jag är inte säker på att jag förstår. Det ser ut som om du inte behöver visa den UCHAR som Binary eller Hex, men bara för att göra lite bitvis logisk operation och skift på den UCHAR. Något som att räkna antalet 1 bitar från det här uchar till exempel: unsigned char 93 93 bitantal 0 printf (quotbitcount: dnquot, bitcount) Lördag 9 december 2006 21:11 Kan jag hämta bit för bit genom att växla åt höger (gtgt) eller till vänster (ltlt) Ie cf 66 - 01010101 Var den sista biten har gått. Söndag den 10 december 2006 10:02 Nej, du kan inte. Du måste testa den första biten, skift, testa igen och så vidare. På monteringsspråket kan den bit som går ut oftast hittas i något som kallas kvadratisk flagkvot och det kan testas där men CC har ingen sådan sak. Söndag den 10 december, 2006 1:18 PM Det är precis vad jag letade efter (en bär). Men med ett par justeringar till den kod du gav mig lyckas jag göra det utan signerad karaktär c 93 printf (ctxnn, c, c) om (c amp 128) Dj1 för (j0jlt8j) printf (d, Dj) söndag, december 10, 2006 2:20 PM Det här ser inte ut som jag är korrekt. Onsdag 07 november 2007 5:25 PM 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?

No comments:

Post a Comment