Monday, 20 November 2017

C printf char binary options


C library function - sprintf () Para especificadores inteiros (d, i, o, u, x, X) menos precisão especifica o número mínimo de dígitos a serem gravados. Se o valor a ser escrito for menor que este número, o resultado será preenchido com zeros à esquerda. O valor não é truncado mesmo se o resultado for mais longo. Uma precisão de 0 significa que nenhum caractere é escrito para o valor 0. Para os especificadores e, E e f menos este é o número de dígitos a serem impressos após o ponto decimal. Para especificadores g e G minus Este é o número máximo de dígitos significativos a serem impressos. Para s menos este é o número máximo de caracteres a serem impressos. Por padrão, todos os caracteres são impressos até que o caractere nulo final seja encontrado. Para c tipo menos ele não tem efeito. Quando nenhuma precisão é especificada, o padrão é 1. Se o período é especificado sem um valor explícito para precisão, 0 é assumido. A precisão não é especificada na seqüência de caracteres de formato, mas como um argumento de valor inteiro adicional que precede o argumento que deve ser formatado. O argumento é interpretado como um int curto ou unsigned short int (somente se aplica a integer especificadores: i, d, o, u, x e X). O argumento é interpretado como um int long ou unsigned long int para integer especificadores (i, d, o, u, x e X), e como um caractere largo ou cadeia de caracteres larga para os especificadores c e s. O argumento é interpretado como um duplo longo (aplica-se apenas a especificadores de ponto flutuante menos e, E, f, g e G). Argumentos adicionais menos Dependendo da string de formato, a função pode esperar uma seqüência de argumentos adicionais, cada um contendo um valor a ser inserido em vez de cada tag especificado no parâmetro de formato (se houver). Deve haver o mesmo número de argumentos como o número de - tags que esperam um valor. Valor de retorno Se bem-sucedido, o número total de caracteres escritos é retornado excluindo o caractere nulo anexado no final da seqüência de caracteres, caso contrário, um número negativo é retornado em caso de falha. O exemplo a seguir mostra o uso da função sprintf (). Deixe-nos compilar e executar o programa acima, isso produzirá o resultado seguinte função de biblioteca moinsC - printf () Para especificadores inteiros (d, i, o, u, x, X) menos precisão especifica o número mínimo de dígitos a serem gravados. Se o valor a ser escrito for menor que este número, o resultado será preenchido com zeros à esquerda. O valor não é truncado mesmo se o resultado for mais longo. Uma precisão de 0 significa que nenhum caractere é escrito para o valor 0. Para os especificadores e, E e f menos este é o número de dígitos a serem impressos após o ponto decimal. Para especificadores g e G menos Este é o número máximo de dígitos significativos a serem impressos. Para s menos este é o número máximo de caracteres a serem impressos. Por padrão, todos os caracteres são impressos até que o caractere nulo final seja encontrado. Para c tipo menos ele não tem efeito. Quando nenhuma precisão é especificada, o padrão é 1. Se o período é especificado sem um valor explícito para precisão, 0 é assumido. A precisão não é especificada na seqüência de caracteres de formato, mas como um argumento de valor inteiro adicional que precede o argumento que deve ser formatado. O argumento é interpretado como um int curto ou unsigned short int (somente se aplica a integer especificadores: i, d, o, u, x e X). O argumento é interpretado como um int long ou unsigned long int para integer especificadores (i, d, o, u, x e X), e como um caractere largo ou cadeia de caracteres larga para os especificadores c e s. O argumento é interpretado como um duplo longo (aplica-se apenas a especificadores de ponto flutuante: e, E, f, g e G). Argumentos adicionais menos Dependendo da string de formato, a função pode esperar uma seqüência de argumentos adicionais, cada um contendo um valor a ser inserido em vez de cada tag especificado no parâmetro de formato (se houver). Deve haver o mesmo número de argumentos como o número de - tags que esperam um valor. Valor de retorno Se bem-sucedido, o número total de caracteres escritos é retornado. Em caso de falha, um número negativo é retornado. O exemplo a seguir mostra o uso da função printf (). Vamos compilar e executar o programa acima para produzir o seguinte resultado minusPrintf Formatar seqüências Por Alex Allain Por padrão, C fornece uma grande quantidade de energia para a formatação de saída. A função de exibição padrão, printf, tem uma seqüência de formato que permite especificar muita informação sobre como um programa é formatado. Nota: se você estiver procurando por informações sobre formatação de saída em C, dê uma olhada na formatação de saída C usando iomanip. Vamos olhar para a anatomia de uma seqüência de caracteres de formato seguido por alguns programas de exemplo curto para mostrar as configurações diferentes em ação. Eu não vou incluir todas as opções possíveis - em vez disso, meu objetivo é tornar mais fácil de entender o mini-idioma que você pode usar para criar strings de formato e ensinar-lhe como usar a formatação comum youre mais provável de precisar. Anatomia de uma String de Formato Quando você faz uma chamada para printf, a idéia básica é que você vai fornecer uma seqüência de caracteres que tem alguns caracteres literais e alguns elementos que devem ser substituídos. Por exemplo, uma seqüência de caracteres como: Será impressa literalmente conforme ela aparecer. Embora às vezes seja suficiente literalmente escrever em seu código exatamente o que você deseja imprimir, geralmente você quer fazer algo mais sofisticado - introduzindo caracteres especiais usando seqüências de escape ou introduzindo valores de variáveis ​​usando especificadores de formato. Seqüências de Escape Existem alguns caracteres que você não pode entrar diretamente em uma seqüência de caracteres. Estes são caracteres como uma nova linha, que deve ser representada usando alguma sintaxe especial. Estes são chamados seqüências de escape e olhar como este: Aqui, Ive entrou o newlines entre cada letra, a, bec. Cada seqüência de escape começa com um caractere de barra invertida (). As principais seqüências de escape que você usará são: n, para colocar uma nova linha, e t, para colocar em uma guia. Uma vez que uma barra invertida normalmente indica o início de uma seqüência de escape, se você quiser colocar uma seqüência de escape que você precisa usar para exibir uma barra invertida: é como você escrever um caminho do Windows em C. Theres um outro truque avançado, que é que você Pode escrever ltnumgt para exibir o caractere ASCII representado pelo valor num. Isso é útil se você deseja exibir um caractere que você não pode facilmente digitar no teclado, como letras acentuadas. Por exemplo, 130 irá imprimir um caractere (em alguns casos, dependendo do que a máquina está configurada para fazer com os caracteres ASCII estendidos). Especificadores de formato Se você quiser introduzir alguma variação na saída, faça isso indicando que as fontes externas Dados são necessários: Nesta seqüência de caracteres, d indica que o valor a ser exibido nesse ponto na seqüência de caracteres precisa ser retirado de uma variável. O sinal indica que estamos emendando alguns dados na seqüência, eo caractere d indica que estamos emendando um número decimal. A parte da seqüência que começa com é chamada de especificador de formato. Para realmente obter esse número, precisamos fornecer esse valor para printf: o que exibirá: Toda a formatação interessante que você pode fazer envolve a alteração dos valores que você coloca após o sinal, que é o formato real. O formato para o que aparece sobre um sinal é: A maioria desses campos são opcionais, além de fornecer um especificador de conversão, que você já viu (por exemplo, usando d para imprimir um número decimal). Compreender esta formatação é melhor feito trabalhando para trás, começando com o especificador de conversão e trabalhando para fora. Então vamos começar no final Especificador de conversão O especificador de conversão é a parte do especificador de formato que determina a formatação básica do valor a ser impresso. Especificadores de conversão para inteiros Se você quiser imprimir um número inteiro decimal na base 0, use o d ou i. D ou i. Se você quiser imprimir um inteiro em octal ou hexadecimal, use o para octal ou x para hexadecimal. Se você quiser letras maiúsculas (A em vez de um ao imprimir decimal 10), então você pode usar X. Especificadores de conversão para números de ponto flutuante Exibir os números de ponto flutuante tem uma tonelada de opções diferentes, melhor mostrado em uma tabela: Ok, que wasnt muito ruim era Mas esse gráfico é um pouco complicado. Minha recomendação: basta usar g, e geralmente fará o que você quer: Onde a notação científica é mais apropriada. Exibindo um sinal de porcentagem Como o sinal de porcentagem é usado para definir especificadores de formato, há um especificador de formato especial que significa imprimir o sinal de porcentagem: simplesmente imprimir um sinal de porcentagem. Agora, vamos percorrer cada um dos diferentes componentes de um especificador de formato. Comprimento Modificador O modificador de comprimento talvez seja estranhamente nomeado, não modifica o comprimento da saída. Em vez disso, é o que você usa para especificar o comprimento da entrada. Huh Digamos que você tem: Aqui, d é a entrada para printf eo que você está dizendo é que você quer imprimir d como um casal, mas d não é um duplo, é um longo duplo. Um duplo longo é provável ser 16 bytes (comparado a 8 para um dobro), assim que a diferença importa. Tente executar esse pequeno snippet e descobrirá que obtém uma saída de lixo semelhante a esta: Lembre-se, os bytes que são dados ao printf estão sendo tratados como um duplo - mas eles não são um duplo, theyre um longo duplo. O comprimento é errado, e os resultados são feios O modificador de comprimento é tudo sobre ajudar printf lidar com casos onde você está usando variáveis ​​invulgarmente grandes (ou raramente pequenas). A melhor maneira de pensar sobre os modificadores de comprimento é dizer: que tipo de variável eu tenho, e eu preciso usar um modificador de comprimento para ele Heres uma tabela que deve ajudá-lo: long double d 3.1415926535 printf (Lg, d) Id Gostaria de fazer menção especial sobre o tratamento de caracteres de largura. Se você escrever sem o l, o resultado será imprimir um único W na tela. A razão é que caracteres largos são dois bytes e para caracteres ASCII simples como W, o segundo byte é 0. Portanto, printf acha que a seqüência de caracteres está concluída Você deve dizer printf para procurar caracteres multibyte adicionando o l: ls. (Se você estiver usando wprintf, por outro lado, você pode simplesmente usar s e ele tratará nativamente todas as strings como strings de caracteres largos.) O modificador de precisão é escrito. number, e tem significados ligeiramente diferentes para os diferentes especificadores de conversão (Como d ou g). Para números de ponto flutuante (por exemplo, f), ele controla o número de dígitos impressos após o ponto decimal: Se o número fornecido tiver mais precisão do que o dado, ele será redondeado. Por exemplo: será exibido como Curiosamente, para g e G, ele irá controlar o número de números significativos exibidos. Isso afetará não apenas o valor após a casa decimal, mas o número inteiro. Para números inteiros, por outro lado, a precisão controla o número mínimo de dígitos impressos: Imprimir o número 10 com três dígitos: Há um caso especial para inteiros - se você especificar .0, então o número zero não terá saída : Finalmente, para seqüências de caracteres, a precisão controla o comprimento máximo da seqüência de caracteres exibida: Isso é útil se você precisar se certificar de que sua saída não vai além de um número fixo de caracteres. O campo de largura é quase o oposto do campo de precisão. Precisão controla o número máximo de caracteres a imprimir, a largura controla o número mínimo e tem o mesmo formato de precisão, exceto sem um ponto decimal: Os espaços em branco vão no início, por padrão. Você pode combinar a precisão ea largura, se quiser: ltwidthgt. ltprecisiongt (Observe o espaço inicial.) A configuração de sinalizador controla os caracteres que são adicionados a uma seqüência de caracteres, como se anexar 0x a um número hexadecimal ou se a preencher números com 0s. As opções de sinalizador específicas são O sinal de libra: adicionar um fará com que um 0 seja precedido de um número octal (ao usar o especificador de conversão) ou um 0x a ser anexado a um número hexadecimal (ao usar um especificador de conversão x). Para a maioria dos outros especificadores de conversão, adicionar uma vontade simplesmente forçar a inclusão de um ponto decimal, mesmo se o número não tiver parte fracionária. Sendo impressos. Considerando que os resultados em simplesmente O Zero Flag: 0 Usando 0 forçará o número a ser preenchido com 0s. Isso só realmente importa se você usar a configuração de largura para pedir uma largura mínima para o seu número. Por exemplo, se você escrever: O sinal de sinal mais: O sinal de mais incluirá o especificador de sinal para o número: O sinal de sinal menos: - Finalmente, o sinal de menos fará com que a saída seja justificada à esquerda. Isso é importante se você estiver usando o especificador de largura e deseja que o preenchimento apareça no final da saída em vez do início: Com o preenchimento no final da saída. Combinando todos juntos Para qualquer especificador de formato dado, você pode fornecer deve sempre fornecer o sinal de porcentagem eo especificador de base. Você pode então incluir qualquer, ou todas, as bandeiras, largura e precisão e comprimento que você deseja. Você pode até incluir várias bandeiras togeher. Heres um exemplo particularmente complexo demonstrando múltiplos sinalizadores que seria útil para imprimir endereços de memória como valores hexadecimais. A maneira mais fácil de ler isso é primeiro aviso o sinal e, em seguida, ler direita para a esquerda - o x indica que estamos a imprimir um valor hexadecimal o 10 indica que queremos 10 total de caracteres de largura o próximo 0 é uma bandeira indicando que queremos Para preencher com 0s intead de espaços, e, finalmente, o sinal indica que queremos um 0x líder. Desde que começamos com 0x, isso significa que temos 8 dígitos - exatamente a quantidade certa para imprimir um endereço de memória de 32 bits. O resultado final é: Leia mais artigos similares

No comments:

Post a Comment