blob: 23ee19ad5cd27de3700bc7ca3742161dcd64c528 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
/*
bug3475656.c
Digits in output were reversed (e.g. 192 was written as "291").
*/
#include <testfwk.h>
#ifdef __SDCC
#pragma disable_warning 85
#endif
#define UCHAR unsigned char
#define USHORT unsigned short
#define PCHAR unsigned char *
UCHAR mod_16x8(USHORT s16, UCHAR i8)
{
return(s16 % i8);
}
USHORT div_16x8(USHORT s16, UCHAR i8)
{
return(s16 / i8);
}
#if 1
void itoa(USHORT sVal, PCHAR pBuf, UCHAR iRadix)
{
PCHAR p; // pointer to traverse string
PCHAR pFirstDigit; // pointer to first digit
UCHAR iTmp; // temp UCHAR
p = pBuf;
pFirstDigit = p; // save pointer to first digit
do
{
iTmp = mod_16x8(sVal, iRadix);
sVal = div_16x8(sVal, iRadix);
// convert to ascii and store
*p++ = (iTmp > 9) ? iTmp - 10 + 'A' : iTmp + '0'; // a letter or a digit
} while (sVal > 0);
// We now have the digit of the number in the buffer, but in reverse order. Thus we reverse them now.
*p-- = '\0'; // terminate string; p points to last digit
do
{
iTmp = *p;
*p = *pFirstDigit;
*pFirstDigit = iTmp; // swap *p and *pFirstDigit
--p;
++pFirstDigit; // advance to next two digits
} while (pFirstDigit < p); // repeat until halfway
}
#endif
void testBug(void)
{
unsigned char c[8];
unsigned short i;
i = 192;
#if 1
itoa(i, c, 10);
ASSERT(c[0] == '1');
ASSERT(c[1] == '9');
ASSERT(c[2] == '2');
#endif
}
|