I am working on a little program that needs to convert long Ascii character strings of Hex (ie/ 4A2345FC5E32......) to a seiries of Binary bytes.
I can figure out how to do this, but I was wondering if I should be needing to code routines to do these mundane tasks or am I just re-inventing the wheel. Does windows provide something already designed for this?
TIA
dicky
I can figure out how to do this, but I was wondering if I should be needing to code routines to do these mundane tasks or am I just re-inventing the wheel. Does windows provide something already designed for this?
TIA
dicky
dicky96,
Do you mean a series of binary ASCII bytes? Such as 32 ASCII binary byte representations for each DWORD? By the way, what happened to the previous 95 dickies? Ratch
Do you mean a series of binary ASCII bytes? Such as 32 ASCII binary byte representations for each DWORD? By the way, what happened to the previous 95 dickies? Ratch
What I mean is I have a long string of text data like this
4A3236........
which is of course a series of Ascii character codes in memory (cos it's readable on screen)
34h 41h 33h 32h 33h 36h.....................
This is clearly visible anyway if I open the file in Ultredit and select "Hex Edit"
I need to convert this string to actual binary bytes - so 4A is a single byte 4Ah (or 01001010) and not two bytes 34h 41h
I can figure how to convert that for 0-9 I just AND with 0Fh - for A to F use a little look up table and then do each nibble in turn, shift and combine to make a byte value (well that's the way I would do it but hey I'm just a learner.......)
But what I was asking is am I reinventing the wheel here and there is some function that would just convert the whole string for me?
dicky96
PS what happened to the other 95 is a long story :P
4A3236........
which is of course a series of Ascii character codes in memory (cos it's readable on screen)
34h 41h 33h 32h 33h 36h.....................
This is clearly visible anyway if I open the file in Ultredit and select "Hex Edit"
I need to convert this string to actual binary bytes - so 4A is a single byte 4Ah (or 01001010) and not two bytes 34h 41h
I can figure how to convert that for 0-9 I just AND with 0Fh - for A to F use a little look up table and then do each nibble in turn, shift and combine to make a byte value (well that's the way I would do it but hey I'm just a learner.......)
But what I was asking is am I reinventing the wheel here and there is some function that would just convert the whole string for me?
dicky96
PS what happened to the other 95 is a long story :P
I don't really think you are reinventing the wheel. Anyway, just watch out for the endian issue.
OK thanks for that.
I don't see the "endian issue" will affect me here as the data is actually the ascii representation of a log of serial data comms between two devices and as such each byte is just a byte, not part of a word or double word etc.
But cheers for reminding me about it - I still can't figure why Intel did that byte order thing backwards other than it must be something to do with californian grass :shock:
dicky
I don't see the "endian issue" will affect me here as the data is actually the ascii representation of a log of serial data comms between two devices and as such each byte is just a byte, not part of a word or double word etc.
But cheers for reminding me about it - I still can't figure why Intel did that byte order thing backwards other than it must be something to do with californian grass :shock:
dicky
Easy as Pi to do.
Just use a 1111b LUT
You have the ascii string
"FE",0
Take the first byte "F"
Convert it to a binary number 0-15
--Do this by 1 cmp subtract for Just upper case letter compatibility or a few compares for upper and lower case letter compatibility.
Ok "F" now = 15 binary
Use your lookup table and get a 1111b back from it
-------------------------------------------------
Do the same thing with the "E" and get a 1110b back
-------------------------------------------------
Shift the 1111 to the left 4 bits and OR in the 1110b and you have yourself a binary byte from an ascii hex string.
Just use a 1111b LUT
You have the ascii string
"FE",0
Take the first byte "F"
Convert it to a binary number 0-15
--Do this by 1 cmp subtract for Just upper case letter compatibility or a few compares for upper and lower case letter compatibility.
Ok "F" now = 15 binary
Use your lookup table and get a 1111b back from it
-------------------------------------------------
Do the same thing with the "E" and get a 1110b back
-------------------------------------------------
Shift the 1111 to the left 4 bits and OR in the 1110b and you have yourself a binary byte from an ascii hex string.