is convert unsigned char / int to hex, trouble is no correct translate ascci table: original: 0D, converted: AD code:
char int_to_hex(int d) {
if (d < 0) return -1;
if (d > 16) return -1;
if (d <= 9) return '0' + d;
d -= 10;
return (char)('A' + d);
}
void uint_to_hex(unsigned char in, char **out, int *olen) {
int i = 0;
int remain[2];
int result = (int)in;
while (result) {
remain[i++] = result % 16;
result /= (int)16;
}
for (i = 1; i >= 0; --i) {
char c = int_to_hex(remain[i]);
if( (int)c == -1 ) { continue; }
*((*out) + (*olen)) = (char)c; (*olen)++;
}
}
where is incorrect ?..
First of all one hex digit will cover values from 0 (0) to 15 (F) not from 0 to 16 (as you seem to assume in
int_to_hexfunction).Also you don't really need typecasting to
charin last return of that function.In fact all typecasts here are rather unnecessary
And typecasting of literal
16is purely absurd...And how sample input for
uint_to_hexis looking ? You are aware, that on input (in) you can pass only singlecharacter ?I think that char pointer would suffice for
out- i mean, you want to return array, right ? So instead of**should be only singe*.And I don't understand why
olenhas to be pointer (and argument to function too).And you should try to write more concise and readable code, it will help you understand what you are doing too.