Files

65 lines
1.5 KiB
C

#include "Common.h"
uint16_t BufferToHexString(char* HexOut, uint16_t MaxChars, const void* Buffer, uint16_t ByteCount)
{
uint8_t* ByteBuffer = (uint8_t*) Buffer;
uint16_t CharCount = 0;
/* Account for '\0' at the end */
MaxChars--;
while( (ByteCount > 0) && (MaxChars >= 2) ) {
uint8_t Byte = *ByteBuffer;
HexOut[0] = NIBBLE_TO_HEXCHAR( (Byte >> 4) & 0x0F );
HexOut[1] = NIBBLE_TO_HEXCHAR( (Byte >> 0) & 0x0F );
HexOut += 2;
MaxChars -= 2;
CharCount += 2;
ByteBuffer++;
ByteCount -= 1;
}
*HexOut = '\0';
return CharCount;
}
uint16_t HexStringToBuffer(void* Buffer, uint16_t MaxBytes, const char* HexIn)
{
uint8_t* ByteBuffer = (uint8_t*) Buffer;
uint16_t ByteCount = 0;
while( (HexIn[0] != '\0') && (HexIn[1] != '\0') && (MaxBytes > 0) ) {
if (VALID_HEXCHAR(HexIn[0]) && VALID_HEXCHAR(HexIn[1])) {
uint8_t Byte = 0;
Byte |= HEXCHAR_TO_NIBBLE(HexIn[0]) << 4;
Byte |= HEXCHAR_TO_NIBBLE(HexIn[1]) << 0;
*ByteBuffer = Byte;
ByteBuffer++;
MaxBytes--;
ByteCount++;
HexIn += 2;
} else {
/* HEX chars only */
return 0;
}
}
if ( (HexIn[0] != '\0') && (HexIn[1] == '\0') ) {
/* Odd number of characters */
return 0;
}
return ByteCount;
}