Eu encontrei isso em algum código-fonte hoje:
SELECT
@Error = ERROR_NUMBER (),
@ErrorMsg = N'An Error occured while populating the TABLE ' + @DestinationTableName +
N' with data. Error Code: ' + CAST ( @Error AS nvarchar(20) ) +
N', Error Description: "' + ERROR_MESSAGE () + N'".'
+ NCHAR(0X0D) + NCHAR(0X0A) + NCHAR(0X0D) + NCHAR(0X0A),
@ErrorSeverity = ERROR_SEVERITY (),
@ErrorState = ERROR_STATE () ;
Parece que a string da mensagem de erro está adicionando dois feeds de linha após a descrição. 0X0D é 13 e 0X0A é 10.
Existe uma razão para usar hexadecimal em vez de apenas números inteiros?
Normalmente o que eu fiz é NCHAR(13) + NCHAR(10)...
Sim, existe o motivo óbvio de legibilidade. Para programadores, números decimais não têm sentido. O que diabos é
3221225477
? Mas0xc0000005
você o reconhece imediatamente.2147500037
? Não toca sino, mas0x80004005
superconhecido. Estes são valores que carregam significado, você os reconhece de relance depois de vê-los todos os dias no depurador... Torna-se uma segunda natureza.E não, não estou brincando nem sendo sarcástico. Sou muito sério. Eu também usaria 0x0D e 0x0A. Se eu vir 13, teria que pensar que valor é esse.
Como você disse na sua pergunta, esses valores são equivalentes e, portanto, não há razão ou diferença. É apenas a base usada (hexadecimal [base 16] vs. decimal [base 10]).
Aqui está a prova de que eles são iguais:
Portanto, para responder à sua pergunta: não, não há razão para usar valores hexadecimais em decimais. Tradicionalmente, com bitmaps e operações bit a bit, é muito mais fácil fazer matemática visual de bits com hex, mas isso claramente não é a força motriz por trás da intenção do desenvolvedor original com esse código.
Veja também a referência de BOL em NCHAR :