CCS C Software and Maintenance Offers
FAQFAQ   FAQForum Help   FAQOfficial CCS Support   SearchSearch  RegisterRegister 

ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

CCS does not monitor this forum on a regular basis.

Please do not post bug reports on this forum. Send them to support@ccsinfo.com

printf with non printable characters

 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
E_Blue



Joined: 13 Apr 2011
Posts: 406

View user's profile Send private message

printf with non printable characters
PostPosted: Sun Dec 30, 2018 7:17 pm     Reply with quote

I need to send some variable fixed strings of about 15 to 25 bytes but I don't want to do this.

Code:

printf(LoadTX2,"%c%c%c%c%c%c%c%c%c%c",0x00,0x02,0x03,0x25,0x00,0x04,0x00,0x14,0x00,0x36);


Because I must to count how many bytes are to know how many %c I must to use.
Also, as you see, there's some null bytes so I think I can't use a string.

On the other hand I need to send a 24 Bit ID

Code:

int32 myID = 0x078090;


How I should add that variable to the printf?
_________________
Electric Blue
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Sun Dec 30, 2018 7:30 pm     Reply with quote

Quote:
I need to send some variable fixed strings of about 15 to 25 bytes

Put the bytes in an array and use putc() in a for() loop to send them.
Use sizeof on the array in the for() loop to get the number of bytes.


Quote:
On the other hand I need to send a 24 Bit ID

int32 myID = 0x078090;

How I should add that variable to the printf?

Use %lx to send it with printf. Or, tell us what format you want to
send it in.
E_Blue



Joined: 13 Apr 2011
Posts: 406

View user's profile Send private message

PostPosted: Sun Dec 30, 2018 7:39 pm     Reply with quote

I need to send the int32 0x078090 as literal bytes 0x07,0x80,0x90 not as ASCII string.

All this is a security protocol between two processors, so there's non ASCII printable characters.

As for the array, as far I understand, sizeof retrieves the size of the array not the actual byte count; so I guess I must to create a new variable for each string of bytes. Am I correct?
_________________
Electric Blue
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Sun Dec 30, 2018 7:53 pm     Reply with quote

This would do it:
Code:

#include <18F46K22.h>
#fuses INTRC_IO, NOWDT, BROWNOUT, PUT, NOPBADEN
#use delay(clock=4M)
#use rs232(baud=9600, UART1, ERRORS)

//======================================
void main()
{                                                                     
int8 data[]= {0x00,0x02,0x03,0x25,0x00,0x04,0x00,0x14,0x00,0x36};

int32 myID = 0x078090;
int8 i;

for(i=0; i < sizeof(data); i++)
    putc(data[i]);

putc(myID >> 16);
putc(myID >> 8);
putc(myID);


while(TRUE);
}
E_Blue



Joined: 13 Apr 2011
Posts: 406

View user's profile Send private message

PostPosted: Sun Dec 30, 2018 8:11 pm     Reply with quote

Thanks, that help me with a lots of doubts.
_________________
Electric Blue
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Page 1 of 1

 
Jump to:  
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