|
|
View previous topic :: View next topic |
Author |
Message |
No_Fear Guest
|
IntToHex and HexToInt |
Posted: Sat Jan 11, 2003 2:36 pm |
|
|
Hi there,
I wrote a code in borland c++ builder and i want to implement my code to ccs.Most of the project went good but in ccs there is no (i think) IntToHex and HexToInt functions.Can somebody give me idea about it? Thank you.
p.s. I only want to convert integer values to hex format and bring it back.
___________________________
This message was ported from CCS's old forum
Original Post ID: 10620 |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
Re: IntToHex and HexToInt |
Posted: Sat Jan 11, 2003 11:36 pm |
|
|
:=Hi there,
:=I wrote a code in borland c++ builder and i want to implement my code to ccs.Most of the project went good but in ccs there is no (i think) IntToHex and HexToInt functions.Can somebody give me idea about it? Thank you.
:=p.s. I only want to convert integer values to hex format and bring it back.
--------------------------------------------------------
You're probably thinking of axtoi() and itoax().
http://bdn.borland.com/article/0,1410,17203,00.html
Or, see my versions below:
For some reason, I named one of them itoah instead of itoax.
I don't claim these routines are the most efficient
way to do it. I probably wrote them with a goal
of keeping the ROM size small. It's been a while.
Note: Even those these routines have pointers as
arguments, they don't operate on strings. There is
no string-terminator expected or written. These
routines were written to do a specific job, and not
for the general case.
Note that you can also use the CCS sprintf() function
to convert from integer to ascii hex.
Code: | // Convert an 8 bit number to two ascii hex chars.
// The output will always be two bytes. Don't write
// a string terminator byte at the end.
void itoah(char value, char *output_ptr)
{
char temp;
temp = (value >> 4); // Move hi nybble into low position
temp += '0'; // Add ascii bias
if(temp > '9') // Is upper nybble = A to F ?
temp += 7; // If so, add more bias
*output_ptr++ = temp; // Put result into output buffer
temp = value & 0x0f; // Isolate lower nybble
temp += '0'; // Add ascii bias
if(temp > '9') // Is lower nybble = A to F ?
temp += 7; // If so, add more bias
*output_ptr++ = temp; // Put result into output buffer
}
//---------------------------------------------------------
// Convert 1 or 2 ascii hex characters to a binary value.
char axtoi(char *ptr)
{
char i, c, value;
value = 0;
for(i = 0; i < 2; i++) // Convert a maximum of 2 digits
{
c = *ptr++; // Get the char
if(c >= 'a') // If char is lower case,
c &= 0x5f; // convert to upper case.
if(c < '0') // Check if the char is an ascii hex char
break;
if(c > 'F')
break;
if(c < 'A')
{
if(c > '9')
break;
}
c -= 0x30; // Convert the char to binary
if(c > 9)
c -= 7;
value <<= 4; // Shift existing value left 1 nybble
value |= c; // Then combine it with new nybble
}
return(value);
} |
___________________________
This message was ported from CCS's old forum
Original Post ID: 10622
-------
Edited to put to code in a "code block" to make it easier to read.
Last edited by PCM programmer on Sun Feb 12, 2006 2:37 pm; edited 1 time in total |
|
|
No_Fear Guest
|
Re: IntToHex and HexToInt |
Posted: Mon Jan 13, 2003 2:57 pm |
|
|
<font face="Courier New" size=-1>@PCM Programmer :
Sorry for delay.I tried to compile your specific axtoi(..) function but my ccs compiler gave me error "Expection LVALUE such as a variable name ...." in line contains
c = *ptr++; // Get the char
but this code can be compiled easily in bcb 4.0 and works fine. Did i miss something?
Thank you.
:=:=Hi there,
:=:=I wrote a code in borland c++ builder and i want to implement my code to ccs.Most of the project went good but in ccs there is no (i think) IntToHex and HexToInt functions.Can somebody give me idea about it? Thank you.
:=:=p.s. I only want to convert integer values to hex format and bring it back.
:=--------------------------------------------------------
:=You're probably thinking of axtoi() and itoax().
:= <a href="http://bdn.borland.com/article/0,1410,17203,00.html" TARGET="_blank"> <a href="http://bdn.borland.com/article/0,1410,17203,00.html" TARGET="_blank"> <a href="http://bdn.borland.com/article/0,1410,17203,00.html" TARGET="_blank">http://bdn.borland.com/article/0,1410,17203,00.html</a></a></a>
:=
:=Or, see my versions below:
:=For some reason, I named one of them itoah instead of itoax.
:=
:=I don't claim these routines are the most efficient
:=way to do it. I probably wrote them with a goal
:=of keeping the ROM size small. It's been a while.
:=
:=Note: Even those these routines have pointers as
:=arguments, they don't operate on strings. There is
:=no string-terminator expected or written. These
:=routines were written to do a specific job, and not
:=for the general case.
:=
:=Note that you can also use the CCS sprintf() function
:=to convert from integer to ascii hex.
:=
:=<PRE>
:=// Convert an 8 bit number to two ascii hex chars.
:=// The output will always be two bytes. Don't write
:=// a string terminator byte at the end.
:=
:=void itoah(char value, char *output_ptr)
:={
:=char temp;
:=
:=temp = (value >> 4); // Move hi nybble into low position
:=temp += '0'; // Add ascii bias
:=if(temp > '9') // Is upper nybble = A to F ?
:= temp += 7; // If so, add more bias
:=*output_ptr++ = temp; // Put result into output buffer
:=
:=temp = value & 0x0f; // Isolate lower nybble
:=temp += '0'; // Add ascii bias
:=if(temp > '9') // Is lower nybble = A to F ?
:= temp += 7; // If so, add more bias
:=*output_ptr++ = temp; // Put result into output buffer
:=}
:=
:=//---------------------------------------------------------
:=// Convert 1 or 2 ascii hex characters to a binary value.
:=
:=char axtoi(char *ptr)
:={
:=char i, c, value;
:=
:=value = 0;
:=
:=for(i = 0; i < 2; i++) // Convert a maximum of 2 digits
:= {
:= c = *ptr++; // Get the char
:=
:= if(c >= 'a') // If char is lower case,
:= c &= 0x5f; // convert to upper case.
:=
:= if(c < '0') // Check if the char is an ascii hex char
:= break;
:= if(c > 'F')
:= break;
:= if(c < 'A')
:= {
:= if(c > '9')
:= break;
:= }
:=
:= c -= 0x30; // Convert the char to binary
:= if(c > 9)
:= c -= 7;
:= value <<= 4; // Shift existing value left 1 nybble
:= value |= c; // Then combine it with new nybble
:= }
:=
:=return(value);
:=}
:=
:=
___________________________
This message was ported from CCS's old forum
Original Post ID: 10661 |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
Re: IntToHex and HexToInt |
Posted: Mon Jan 13, 2003 3:20 pm |
|
|
<font face="Courier New" size=-1>:=
:=Sorry for delay.I tried to compile your specific axtoi(..) function but my ccs compiler gave me error "Expection LVALUE such as a variable name ...." in line contains
:=
:=c = *ptr++; // Get the char
-------------------------------------------------------
I cut and pasted the axtoi function out of my post into MPLAB.
I added some code to call the function. I compiled it with
PCM vs. 3.131 and PCM vs. 2.734. It compiles with no errors
with both versions. I tested both hex files and they both
work OK.
#include "c:\program files\picc\devices\16F877.h"
#fuses HS,NOWDT,NOPROTECT,PUT,BROWNOUT, NOLVP
#use Delay(clock=8000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, ERRORS)
char axtoi(char *ptr);
//===============================================
void main()
{
char c;
char hex_string[2];
hex_string[0] = 'A';
hex_string[1] = 'F';
c = axtoi(hex_string);
printf("\%x", c);
while(1);
}
//===============================================
// Convert 1 or 2 ascii hex characters to a binary value.
char axtoi(char *ptr)
{
char i, c, value;
value = 0;
for(i = 0; i < 2; i++) // Convert a maximum of 2 digits
{
c = *ptr++; // Get the char
if(c >= 'a') // If char is lower case,
c &= 0x5f; // convert to upper case.
if(c < '0') // Check if the char is an ascii hex char
break;
if(c > 'F')
break;
if(c < 'A')
{
if(c > '9')
break;
}
c -= 0x30; // Convert the char to binary
if(c > 9)
c -= 7;
value <<= 4; // Shift existing value left 1 nybble
value |= c; // Then combine it with new nybble
}
return(value);
}
--
___________________________
This message was ported from CCS's old forum
Original Post ID: 10662 |
|
|
No_Fear Guest
|
Re: IntToHex and HexToInt |
Posted: Tue Jan 14, 2003 2:12 am |
|
|
I can't understand the problem.I'm using pcm v3.082 and it does not compile? Duh.
:=<font face="Courier New" size=-1>:=
:=:=Sorry for delay.I tried to compile your specific axtoi(..) function but my ccs compiler gave me error "Expection LVALUE such as a variable name ...." in line contains
:=:=
:=:=c = *ptr++; // Get the char
:=-------------------------------------------------------
:=
:=I cut and pasted the axtoi function out of my post into MPLAB.
:=I added some code to call the function. I compiled it with
:=PCM vs. 3.131 and PCM vs. 2.734. It compiles with no errors
:=with both versions. I tested both hex files and they both
:=work OK.
:=
:=
:=
:=#include "c:\program files\picc\devices\16F877.h"
:=#fuses HS,NOWDT,NOPROTECT,PUT,BROWNOUT, NOLVP
:=#use Delay(clock=8000000)
:=#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, ERRORS)
:=
:=char axtoi(char *ptr);
:=
:=
:=//===============================================
:=void main()
:={
:=char c;
:=char hex_string[2];
:=
:=hex_string[0] = 'A';
:=hex_string[1] = 'F';
:=
:=c = axtoi(hex_string);
:=
:=printf("\%x", c);
:=
:=while(1);
:=}
:=
:=//===============================================
:=
:=// Convert 1 or 2 ascii hex characters to a binary value.
:=
:=char axtoi(char *ptr)
:={
:=char i, c, value;
:=
:=value = 0;
:=
:=for(i = 0; i < 2; i++) // Convert a maximum of 2 digits
:= {
:= c = *ptr++; // Get the char
:= if(c >= 'a') // If char is lower case,
:= c &= 0x5f; // convert to upper case.
:= if(c < '0') // Check if the char is an ascii hex char
:= break;
:= if(c > 'F')
:= break;
:= if(c < 'A')
:= {
:= if(c > '9')
:= break;
:= }
:= c -= 0x30; // Convert the char to binary
:= if(c > 9)
:= c -= 7;
:= value <<= 4; // Shift existing value left 1 nybble
:= value |= c; // Then combine it with new nybble
:= }
:=return(value);
:=}
:=
:=
:=
:=
:=--
___________________________
This message was ported from CCS's old forum
Original Post ID: 10676 |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
Re: IntToHex and HexToInt |
Posted: Tue Jan 14, 2003 12:36 pm |
|
|
:=I can't understand the problem.I'm using pcm v3.082 and it does not compile? Duh.
:=
------------------------------------------------------
I tried it with 3.082, and it compiled fine.
Just to be really sure, I cut and pasted the code
from my previous post into MPLAB. It compiles.
CCS PCM C Compiler, Version 3.082,
Filename: C:\PICC\TEST\TEST.LST
ROM used: 125 (2\%)
Largest free fragment is 2048
RAM used: 9 (5\%) at main() level
13 (7\%) worst case
Stack: 1 locations
___________________________
This message was ported from CCS's old forum
Original Post ID: 10691 |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|