ID do artigo: 104829 - Última revisão: terça-feira, 22 de fevereiro de 2005 - Revisão: 3.2

INFO: Converter dados binários em seqüência hexadecimal

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.
Expandir tudo | Recolher tudo

Sumário

SQL Server não tem o comando Transact-SQL interno para converter dados binários em uma seqüência de caracteres hexadecimal.

Mais Informações

O comando CONVERT do Transact-SQL converte dados binários em dados de caracteres em um um byte para forma de um caractere. SQL Server usa cada byte de dados binário de origem, converte-os para um valor inteiro e usa esse valor inteiro como o valor ASCII para os dados de caracteres de destino. Esse comportamento se aplica aos binary, varbinary e tipos de dados de carimbo de data/hora.

Por exemplo, valor binário 00001111 (0x0F em hexadecimal) é convertido em seu equivalente de inteiro que é 15 e convertido para o caractere que corresponde ao valor ASCII 15, que é ilegível.

O procedimento armazenado seguinte pode ser usado para retornar uma seqüência de caracteres que contém a representação hexadecimal de um valor binário:
   create procedure sp_hexadecimal
     @binvalue varbinary(255)
   as
   declare @charvalue varchar(255)
   declare @i int
   declare @length int
   declare @hexstring char(16)

   select @charvalue = '0x'
   select @i = 1
   select @length = datalength(@binvalue)
   select @hexstring = "0123456789abcdef"

   while (@i <= @length)
   begin

     declare @tempint int
     declare @firstint int
     declare @secondint int

     select @tempint = convert(int, substring(@binvalue,@i,1))
     select @firstint = floor(@tempint/16)
     select @secondint = @tempint - (@firstint*16)

     select @charvalue = @charvalue +
       substring(@hexstring, @firstint+1, 1) +
       substring(@hexstring, @secondint+1, 1)

     select @i = @i + 1

   end

   select 'sp_hexadecimal'=@charvalue
				

Por exemplo, quando o seguinte lote de comando é executado com ISQL:
     declare @bin varbinary(255)
     select @bin = @@dbts
     execute sp_hexadecimal @bin
     select 'isql' = @bin
     go
				

Ele retorna saída similar à seguinte:
     sp_hexadecimal
     ------------------------------------------------------------------
     0x01000000a60b0000

     (1 row affected)


     isql
     ------------------------------------------------------------------
     0x01000000a60b0000
     (1 row affected)
				

A informação contida neste artigo aplica-se a:
  • Microsoft SQL Server 4.21a Standard Edition
  • Microsoft SQL Server 6.0 Standard Edition
  • Microsoft SQL Server 6.5 Standard Edition
  • Microsoft SQL Server 6.5 Service Pack 1
  • Microsoft SQL Server 6.5 Service Pack 2
  • Microsoft SQL Server 6.5 Service Pack 3
  • Microsoft SQL Server 6.5 Service Pack 4
  • Microsoft SQL Server 6.5 Service Pack 5a
  • Microsoft SQL Server 6.5 Service Pack 5a
  • Microsoft SQL Server 7.0 Standard Edition
  • Microsoft SQL Server 7.0 Service Pack 1
Palavras-chave: 
kbmt kbinfo kbother KB104829 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 104829  (http://support.microsoft.com/kb/104829/en-us/ )