none
Converter Byte para decimal RRS feed

  • Pergunta

  • Se eu tenho um Array de bytes e quero converter para seu valor hexadecimal ou decimal, como eu faço isso?

    No meu caso esses dados são recebidos de um cliente, onde uso TcpListener como servidor.

    Grato pela atenção!

    terça-feira, 24 de agosto de 2010 15:16

Respostas

  • Ola Gustavo

     

    Veja esse codigo

    http://www.java2s.com/Code/CSharp/File-Stream/UseMemoryStreamandBinaryReadertoconvertBytearraytodecimal.htm

    Ele faz extamente o que vc quer: convert um parametro byte array em sua formataçao decimal

    Att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    SOGI INFORMATIQUE LTÉE (http://www.sogi.com)
    terça-feira, 24 de agosto de 2010 15:30
    Moderador
  •  Byte[] Bytes = {0xFF, 0xD0, 0xFF, 0xD1};

    BitConverter.ToString(Bytes) ==  "FF-D0-FF-D1"


    What would Brian Boitano do ?
    ((2B || !2B) is Question) ?
    There is no place like 127.0.0.1
    Só existem 10 tipos de pessoas no mundo... as que leem em binario e as outras...
    Se não da certo como voce esta fazendo... Tente fazer de um jeito totalmente diferente....
    • Marcado como Resposta GustavoCarlos terça-feira, 24 de agosto de 2010 19:03
    terça-feira, 24 de agosto de 2010 16:24
    Moderador
  • Gustavo,

    Conforme o link do William, transforme o seu array de bytes em um MemoryStream e então utilize um BinaryReader para ler as informações usando os métodos ReadXXX existentes nessa classe.

    BinaryReader Methods
    http://msdn.microsoft.com/en-us/library/system.io.binaryreader_methods.aspx

    Por exemplo, se o seu tipo é armazenado em 2 bytes então você pode ler o valor usando o método ReadInt16.

    Att.

    Ari C. Raimundo
    MCAD, MCTS
    http://araimundo.blogspot.com

     

     

    • Marcado como Resposta GustavoCarlos terça-feira, 24 de agosto de 2010 19:03
    terça-feira, 24 de agosto de 2010 17:27
    Moderador
  • Então.... por isso que perguntei... nesse caso é melhor manter em binario... da uma olhada nisso:

    public class SocketData {
      private byte[] bytes;
    
      public int Latidude { get; private set; }
      public int Longitude { get; private set; }
      public string OutraCoisa { get; private set; }
    
      public SocketData(byte[] bytes) {
        this.bytes = bytes;
        this.Latidude = BitConverter.ToInt32(bytes, 0);
        this.Longitude = BitConverter.ToInt32(bytes, 4);
        this.OutraCoisa = Encoding.ASCII.GetString(bytes, 8, 4);
      }
    
      public override string ToString() {
        return BitConverter.ToString(this.bytes).Replace("-", "");
      }
    }
    
    


    What would Brian Boitano do ?
    ((2B || !2B) is Question) ?
    There is no place like 127.0.0.1
    Só existem 10 tipos de pessoas no mundo... as que leem em binario e as outras...
    Se não da certo como voce esta fazendo... Tente fazer de um jeito totalmente diferente....
    • Marcado como Resposta GustavoCarlos quinta-feira, 26 de agosto de 2010 12:14
    quarta-feira, 25 de agosto de 2010 23:04
    Moderador

Todas as Respostas

  • Ola Gustavo

     

    Veja esse codigo

    http://www.java2s.com/Code/CSharp/File-Stream/UseMemoryStreamandBinaryReadertoconvertBytearraytodecimal.htm

    Ele faz extamente o que vc quer: convert um parametro byte array em sua formataçao decimal

    Att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------

    SOGI INFORMATIQUE LTÉE (http://www.sogi.com)
    terça-feira, 24 de agosto de 2010 15:30
    Moderador
  •  Byte[] Bytes = {0xFF, 0xD0, 0xFF, 0xD1};

    BitConverter.ToString(Bytes) ==  "FF-D0-FF-D1"


    What would Brian Boitano do ?
    ((2B || !2B) is Question) ?
    There is no place like 127.0.0.1
    Só existem 10 tipos de pessoas no mundo... as que leem em binario e as outras...
    Se não da certo como voce esta fazendo... Tente fazer de um jeito totalmente diferente....
    • Marcado como Resposta GustavoCarlos terça-feira, 24 de agosto de 2010 19:03
    terça-feira, 24 de agosto de 2010 16:24
    Moderador
  • Pessoal, valew essa parte ta funcionando agora, no entando surgiu mais uma duvida;

    Os dados que eu recebo, convertidos ficam da seguinte maneira:

    40-58-1F-14-00-00-01-80-15-40-50-01-01-2C-BC-CA-FB-1C-C8-02-F6-36-3D-20-2E-06-04-2F-00-00-3E

    O que eu preciso fazer agora é separar esses dados, por exemplo os dois primeiros bytes no caso 40-58 é um tipo, depois o 3° 1F é outro tipo e assim por diante, o que quero fazer é colocar por exemplo o 40 e o 58 num array nas posições [0]e[1], ou se tiver alguma forma de colocar todos os bytes cada um em uma posição desse array.

    Grato pela atenção.

    terça-feira, 24 de agosto de 2010 16:49
  • Tem como eu usar o Split?
    terça-feira, 24 de agosto de 2010 16:56
  • Gustavo,

    Conforme o link do William, transforme o seu array de bytes em um MemoryStream e então utilize um BinaryReader para ler as informações usando os métodos ReadXXX existentes nessa classe.

    BinaryReader Methods
    http://msdn.microsoft.com/en-us/library/system.io.binaryreader_methods.aspx

    Por exemplo, se o seu tipo é armazenado em 2 bytes então você pode ler o valor usando o método ReadInt16.

    Att.

    Ari C. Raimundo
    MCAD, MCTS
    http://araimundo.blogspot.com

     

     

    • Marcado como Resposta GustavoCarlos terça-feira, 24 de agosto de 2010 19:03
    terça-feira, 24 de agosto de 2010 17:27
    Moderador
  • Mas no meu caso o que eu quero é só separar todos os dados que estão convertidos em hexadecimal, guardados em uma string desse jeito:

    40-58-1F-14-00-00-01-80-15-40-50-01-01-2C-BC-CA-FB-1C-C8-02-F6-36-3D-20-2E-06-04-2F-00-00-3E tudo isso é uma unica string, o que eu quero fazer é guardar cada dado separado em um array string de 31 posições cada um em uma posição, pensei em usar o metodo Split, mas não estou conseguindo,

    Alguma sugestão?

    Grato pela atenção.

    terça-feira, 24 de agosto de 2010 17:49
  • Consegui resolver o problema pessoal.

    Fiz assim:

    stringArray=stringDados.Split(new char[]{'-'});

    Valew pela atenção

    terça-feira, 24 de agosto de 2010 19:03
  • Gustavo... nesse caso...

    não seria melhor vc manter os dados com um array de bytes ? digo... vc so prescisa converter para string se for para visualização ou algo assim... para todos os outros efeitos é sempre mais facil de trabalhar com os dados binarios e os mesmo ocupam menos espaço em memoria e disco...

    O que vc exatamente esta tentando fazer ?


    What would Brian Boitano do ?
    ((2B || !2B) is Question) ?
    There is no place like 127.0.0.1
    Só existem 10 tipos de pessoas no mundo... as que leem em binario e as outras...
    Se não da certo como voce esta fazendo... Tente fazer de um jeito totalmente diferente....
    terça-feira, 24 de agosto de 2010 22:26
    Moderador
  • É que nesse pacotão ai tenho varios dados, por exemplo 4Bytes são latitude, outros quatro são longitude e assim por diante por exemplo tenho que formar uma palavra assim FB1CC802 que sera a latitude que irei converter para mostrar num mapa.

    Grato pela atenção!

    quarta-feira, 25 de agosto de 2010 12:38
  • Então.... por isso que perguntei... nesse caso é melhor manter em binario... da uma olhada nisso:

    public class SocketData {
      private byte[] bytes;
    
      public int Latidude { get; private set; }
      public int Longitude { get; private set; }
      public string OutraCoisa { get; private set; }
    
      public SocketData(byte[] bytes) {
        this.bytes = bytes;
        this.Latidude = BitConverter.ToInt32(bytes, 0);
        this.Longitude = BitConverter.ToInt32(bytes, 4);
        this.OutraCoisa = Encoding.ASCII.GetString(bytes, 8, 4);
      }
    
      public override string ToString() {
        return BitConverter.ToString(this.bytes).Replace("-", "");
      }
    }
    
    


    What would Brian Boitano do ?
    ((2B || !2B) is Question) ?
    There is no place like 127.0.0.1
    Só existem 10 tipos de pessoas no mundo... as que leem em binario e as outras...
    Se não da certo como voce esta fazendo... Tente fazer de um jeito totalmente diferente....
    • Marcado como Resposta GustavoCarlos quinta-feira, 26 de agosto de 2010 12:14
    quarta-feira, 25 de agosto de 2010 23:04
    Moderador
  • Sim, entendi desse modo fica bem mais facil e simples.

    Valew Rui.

    quinta-feira, 26 de agosto de 2010 12:15