Avatar billede dna8018 Nybegynder
23. juli 2002 - 10:15 Der er 12 kommentarer og
1 løsning

Konverter en lang streng til en hex. tal

Hej,

Er der nogle, der vil hjælpe mig med at lave en funktion som kan konvertere en lang streng til hex tal, eks.
HexConvertFunction("Hello World") returneres til
0x48454C4C20574F524C44

Mange tak
Avatar billede chries Nybegynder
23. juli 2002 - 10:25 #1
Vil du have det tilbage som streng ? ellers kan der max konverteres 8 tegn til en var (uint64 kan holde 8 bytes).
Avatar billede dna8018 Nybegynder
23. juli 2002 - 10:30 #2
Hej chries,

Jeg vil gerne have tilbage som en streng, som indholder de hex tal, den funktion jeg bruge til at sende en sms til mobil telefone, mange tak.

MVH
DNA8018
Avatar billede chries Nybegynder
23. juli 2002 - 10:33 #3
#include "iostream.h"
#include "string.h"
#include "stdio.h"


char* ToHex( char str[] )
{
    int length = strlen( str );

    char *p = new char[length*2+1]; //(2 bytes pr tegn + null terminering)

    for( int i=0; i<length; i++ )
    {
        sprintf( p + i*2, "%02X", str[i] );
    }

    return p;
}

int main(int argc, char* argv[])
{
    char input[1024] = { "Hello World" };                            // user input

    char *str = ToHex( input );

    cout << "0x" << str << endl;

    delete str;

    return 0;
}
Avatar billede chries Nybegynder
23. juli 2002 - 10:37 #4
Hvis 0x skal med i strengen:
#include "iostream.h"
#include "string.h"
#include "stdio.h"


char* ToHex( char str[] )
{
    int length = strlen( str );

    char *p = new char[2 + length*2+1]; //(0x + 2 bytes pr tegn + null terminering)

    strcpy( p, "0x" );

    for( int i=0; i<length; i++ )
    {
        sprintf( p + i*2 + 2, "%02X", str[i] ); // +2 pga 0x
    }

    return p;
}

int main(int argc, char* argv[])
{
    char input[1024] = { "Hello World" };                            // user input

    char *str = ToHex( input );

    cout << str << endl;

    delete str;

    return 0;
}

Hello World ser sådan ud :-)

0x48656C6C6F20576F726C64

http://www.asciitable.com/
Avatar billede dna8018 Nybegynder
23. juli 2002 - 10:45 #5
Hej chries,

Det virker fint, er det muligt at konvertere til flere array type
uint32 UserDefinedData[64], eks. UserDefinedData[0] indholder 48656C6C
og UserDefinedData[1] indholder 6F20576F og UserDefinedData[2] = 726C6400

Mange tak for help
Avatar billede chries Nybegynder
23. juli 2002 - 10:51 #6
hvis der 7 tegn, hvordan skal de sisdte 3 placeres ?

ABCDEFG (aa = A i hex, osv)

aabbccdd eeffgg00
eller
aabbccdd 00eeffgg
Avatar billede dna8018 Nybegynder
23. juli 2002 - 10:55 #7
Det skal være således aabbccdd eeffgg00, fordi alle karakterer skal følgende efter.
Avatar billede chries Nybegynder
23. juli 2002 - 11:53 #8
okay, den var grim :-) ved intel vender det lidt rund ved MSB / LSB når man typecaster :-)

#include "iostream.h"
#include "string.h"
#include "stdio.h"

inline void SwapToMSBFormat( unsigned char* p )
{
    char byte0 = p[0];
    char byte1 = p[1];
    char byte2 = p[2];
    char byte3 = p[3];

    p[0] = byte3;
    p[1] = byte2;
    p[2] = byte1;
    p[3] = byte0;
}

unsigned int * ToHex32( char * str )
{
    unsigned int *p = new unsigned int[64];

    int length = strlen( str );

    memset( p, 0x00, 64*4 );
    memcpy( p, str, length );

    for( int i=0; i<64; i++ )
    {
        SwapToMSBFormat( reinterpret_cast<unsigned char*>( &p[i] ) );
    }

    return p;
}

int main(int argc, char* argv[])
{
    char str[4*64] = {"Hello World" };

    unsigned int *uint32_str = ToHex32(str);

    for( int i=0; i<64; i++ )
    {
        printf( "0x%08X\n",  uint32_str[i]);
    }


    return 0;
}
Avatar billede chries Nybegynder
23. juli 2002 - 11:54 #9
glemte:

  }

    delete uint32_str;

    return 0;
Avatar billede dna8018 Nybegynder
23. juli 2002 - 12:05 #10
Hej Chries,
Jeg bruger Studio Code Compose compiler (c embeded compiler fra Texas) og den compiler kan ikke forstår ordet "reinterpret_cast", er det muligt du skrive på c sprog i stedet for, mange tak
Avatar billede chries Nybegynder
23. juli 2002 - 12:22 #11
prøv istedet:
(unsigned char*)( &p[i] )
Avatar billede chries Nybegynder
23. juli 2002 - 12:23 #12
paranteserne er ikke nødvendig
(unsigned char*)&p[i]
Avatar billede dna8018 Nybegynder
23. juli 2002 - 12:46 #13
Mange tak Chries,
Det virker fint, jeg kan bruge den funktion i mit programmet.
MVH
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester