Ir para conteúdo
Fórum Script Brasil
  • 0

Criar matriz de byte atraves de uma String


darkducke

Pergunta

Galera, seguinte tenho uma imagem que é guardada em uma matriz do tipo byte, ela é assim:

const byte RPrint [] = {

0x01, 0x01, 0x01, 0x31, 0x00, 0x30, 0x38, 0x30, 0x02, 0x20, 0x89, 0xE0, 0xE3, 0xF0, 0xF9, 0xFD,

0xFD, 0xFE, 0xFE, 0xFF, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE,

0xFE, 0xFE, 0xFE, 0xFE, 0xFF, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE,

0xFE, 0xFE, 0xFF, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF, 0xFF, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE,

0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE,

0xFE, 0xFF, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE,

0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE,

0xFE, 0xFC, 0xF8, 0xF8, 0xF0, 0xE2, 0xE4, 0xDE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x50, 0x80, 0x20, 0x04, 0x03, 0x84, 0xF3, 0xFA, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,

0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0xBF, 0x3F, 0x3F, 0x7F, 0xBF,

0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,

0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,

0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,

0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,

0x3F, 0x3F, 0x3F, 0xBF, 0xBF, 0x3F, 0x7F, 0x7F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,

0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xF8, 0xFC, 0xA2, 0x08, 0x90, 0x80,

0x24, 0x80, 0x06, 0xD1, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,

0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0x87, 0xC9, 0xF8, 0xFA, 0xF9, 0xFC, 0xFC, 0xFE, 0xFE, 0xFE,

0xFE, 0xFC, 0xF8, 0x60, 0xFE, 0xFD, 0xFC, 0xFD, 0xFD, 0xFE, 0xFC, 0xFC, 0xFE, 0xFC, 0xFC, 0xF8,

0xF0, 0xC2, 0x40, 0x69, 0xFC, 0xFC, 0xFC, 0xFE, 0xFD, 0xFC, 0xFC, 0xE2, 0x05, 0xE0, 0xFC, 0xFC,

0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xC9, 0x00, 0x00, 0x00, 0x00, 0x10, 0x40, 0x04, 0x00, 0x88, 0xC0,

0xE2, 0xF8, 0xF9, 0xFE, 0xFE, 0xFE, 0xFC, 0xFC, 0xFC, 0xF8, 0xF2, 0xC4, 0x00, 0x08, 0xE4, 0xF2,

0xF8, 0xFC, 0xFC, 0xFC, 0xFD, 0xFC, 0xFC, 0xFC, 0xF4, 0xE0, 0x81, 0x07, 0x3F, 0xFF, 0xFF, 0xFF,

0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xF0, 0x04,

0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,

0xFF, 0xFF, 0xFF, 0x3F, 0x10, 0x52, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x2F, 0x07, 0x0F,

0x0F, 0x3F, 0x1F, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFB, 0xE7, 0xFF, 0xFF, 0xFF, 0xFF,

0xFF, 0xFF, 0x00, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF,

0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x80, 0xC0, 0x20, 0x88, 0x03, 0x48, 0x22, 0x20, 0x10, 0x3F,

0x3F, 0x3F, 0x3F, 0x3F, 0xBF, 0xE7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x44, 0x3E, 0x3F, 0x3F,

0xBF, 0x3F, 0x3F, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x40, 0x00, 0xFF, 0xFF,

0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD,

0x00, 0x80, 0x11, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,

0xFF, 0xFF, 0xFF, 0xFC, 0x20, 0x81, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xF8, 0xF8, 0xF8,

0xFC, 0xFC, 0xFE, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x5F, 0x9F, 0x1F, 0x1F, 0x4F,

0x87, 0x63, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xBF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,

0x9F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

0x80, 0xEA, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xF4, 0x81, 0x00, 0x04, 0xD0,

0xF0, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0xF2, 0x08, 0x00, 0x80, 0xFF, 0xFF,

0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F,

0x54, 0x19, 0x24, 0x45, 0x1F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,

0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFB, 0xC1, 0x83, 0x07, 0x2F, 0x1F, 0x9F, 0x3F, 0x1F, 0x1F,

0x3F, 0x1F, 0x4F, 0x10, 0x1F, 0x9F, 0x1F, 0x1F, 0x5F, 0x3F, 0x5F, 0x24, 0x24, 0x0C, 0x40, 0x10,

0x41, 0x0A, 0x9F, 0x1F, 0x5F, 0x9F, 0x3F, 0x1F, 0x50, 0x02, 0x1F, 0x1F, 0x5F, 0x1F, 0x5F, 0x00,

0x08, 0x9F, 0x5F, 0x3F, 0x1F, 0x1F, 0x1F, 0x98, 0x05, 0x20, 0x02, 0x42, 0x23, 0x10, 0x3A, 0x1E,

0x1F, 0x9F, 0x1F, 0x5F, 0x1F, 0x3F, 0x1F, 0x1F, 0x1F, 0x5F, 0x1F, 0x1F, 0xCB, 0x3C, 0x1F, 0x3F,

0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0xDF, 0xDF, 0xF0, 0xFD, 0xFF, 0xFF, 0xFF,

0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x27, 0x18,

0x20, 0x50, 0x05, 0x04, 0x8C, 0x69, 0x07, 0x0F, 0x3F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,

0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFE, 0xFE, 0xFE, 0xFE,

0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE,

0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE,

0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE,

0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE,

0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,

0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0xDF, 0x07, 0x53, 0x06, 0x08, 0x28,

0x30, 0x00, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x20, 0x94, 0x74, 0x23, 0x0B, 0x87, 0x1F, 0x5F,

0x1F, 0xBF, 0x3F, 0x3F, 0x7F, 0x3F, 0x3F, 0x7F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,

0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,

0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,

0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,

0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F,

0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x7F, 0x3F, 0x3F, 0xBF, 0x3F, 0x7F, 0x3F, 0x3F,

0xBF, 0x7F, 0x9F, 0x0F, 0x27, 0x07, 0x03, 0xD1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00

};

só que eu preciso construir esta matriz dinamicamente, este conteudo está nums string tipo

StringImagem = ' 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x7F, 0x3F, 0x3F, 0xBF, 0x3F, 0x7F, 0x3F, 0x3F' ....

como faria para montar cada codigo hexa dentro de uma posição de minha matriz

tipo eu tenho ela criada zerada byte RPrint [];

tem alguma maneira de fazer isso?

porque eu uso a variavel RPrint para imprimir a imagem....

Obrigado desde já!

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Caramba...você teria que quebrar essa string a cada vírgula e pegar os hexas....

O embaçado é que teria que transformar esses hexas do tipo string para o tipo byte...

Infelizmente eu não sei como fazer essa conversão. Talvez você saiba, se souber avisa, que no resto talvez eu consiga ajudar.

É C ou C++? Tenho a impressão que é C++ mas não tenho certeza.

Aquele abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Um colega em outro forum me passou uma "quse" solução , só o tem um problema justamente na conversão,

veja a função:

/* FUNÇÃO PARA IMPRESSÃO DE LOGO DINAMICA */ 
void MENU_LOGOS(void) 
{ 
   char frase[]          = "0x00, 0x00, ..."; 
   char * palavra; 
   byte xRPrint []       = {0x00, 0x00, ...}; 
    
   int i = 0; 
   palavra = strtok(frase, ", "); 
   while (palavra!=NULL) { 
//      xRPrint[i] = (byte)palavra; 
//     memcpy(xRPrint[i], (byte)palavra, sizeof((byte)palavra)); 
     memset(&xRPrint[i], (byte)&palavra, 4); 
      i++; 
      palavra = strtok(NULL, ", "); 
   } 

 PrintImage((byte *)aRPrint, 5, 128, 8); 
 PrintImage((byte *)xRPrint, 5, 128, 8); 
 PrintImage((byte *)RPrint, 5, 128, 8); 
} 
/* FIM IMPRESSÃO LOGO DINAMICA */

só que não imprime o conteudo, o problema esta na hora de passar o conteudo da variavel palavra, para o xRPrint

.....

:(

Link para o comentário
Compartilhar em outros sites

  • 0

Quanto a ser C ou C++, não há problema! Pode ser feito com qualquer uma das duas linguagens.

Quanto à conversão: realmente não é algo tão simples mas poderia ser muito facilitado se o formato da string fosse outro. Como você recebe esta string? O formato precisa ser mesmo este?

Da forma como está você terá um valor para cada 6 caracteres. O algoritmo deve remover os primeiros dois dígitos ("0x") e converter os outros dois. Segue abaixo o código de uma função que converte um char em seu correspondente em hexa:

byte ConvHexToByte(char hex)
{
   hex = toupper(hex);

   if(hex >= '0' && hex <= '9')
      return (byte)(hex - '0');
   if(hex >= 'A' && hex <= 'F')
      return (byte)(hex - 'A' + 10);
   else
      return (byte)(0);
}
Assim o loop ficaria:
while (palavra!=NULL) {
      palavra += 2; // Avança para após 0x
      xRPrint[i] = ConvHexToByte(palavra[0])*16 + ConvHexToByte(palavra[1]);
      i++;
      palavra = strtok(NULL, ", ");
   }
Só um detalhe: o código não está alocando memória dinamicamente e portanto haverá um limite para a quantidade de dados em xRPrint. Como sabemos que um valor hexa é representado por 6 caracteres na string, poderíamos utilizar o seguinte código para alocar memória dinamicamente:
byte *xRPrint;
xRPrint = (byte *)(malloc(strlen(palavra)/6 + 1);

Eu não sei o tipo de byte mas deve ser um unsigned char. Se não for avise!

Devemos somar 1 pois o último dos valores usará apenas 4 caracteres por não possuir a vírgula e o espaço no final, fazendo o cálculo retornar 1 posição a menos que a realmente necessária.

Obs: eu montei todos os códigos agora, não testei nem compilei! Se algo der errado avise.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...