quick question: how to 'null' blocks of an unsigned char array

Please support our C++ advertiser: Intel Parallel Studio Home
Reply

Join Date: Jun 2008
Posts: 16
Reputation: adamj2 is an unknown quantity at this point 
Solved Threads: 0
adamj2 adamj2 is offline Offline
Newbie Poster

quick question: how to 'null' blocks of an unsigned char array

 
0
  #1
Jul 4th, 2008
Hi there,

Say I have a payload:

1) unsigned char apayload[] = {'H','i',' ','T','h','e','r','e'};

And then I have another payload, which is the same as above but with an additional 2 characters:

2) unsigned char received_payload[]={'H','i',' ','T','h','e','r','e,'a','b''};

How would I go about making the second payload exactly the same as the first payload?

I basically want to null out array blocks [8] and [9] of the second payload so that the characters 'a' and 'b' are ignored basically no longer exist so it becomes a payload of size [8] like the first one.

I am trying this at the moment but it does not work as I guess it is just adding "0" as a character to the array and not terminating that block all together.

for (int i=8;i <10; i++)
received_payload[i] = 0;

Thankyou!!
Reply With Quote Quick reply to this message  
Join Date: Aug 2005
Posts: 15,358
Reputation: Ancient Dragon has a reputation beyond repute Ancient Dragon has a reputation beyond repute Ancient Dragon has a reputation beyond repute Ancient Dragon has a reputation beyond repute Ancient Dragon has a reputation beyond repute Ancient Dragon has a reputation beyond repute Ancient Dragon has a reputation beyond repute Ancient Dragon has a reputation beyond repute Ancient Dragon has a reputation beyond repute Ancient Dragon has a reputation beyond repute Ancient Dragon has a reputation beyond repute 
Solved Threads: 1463
Team Colleague
Featured Poster
Ancient Dragon's Avatar
Ancient Dragon Ancient Dragon is offline Offline
Still Learning

Re: quick question: how to 'null' blocks of an unsigned char array

 
0
  #2
Jul 4th, 2008
>>How would I go about making the second payload exactly the same as the first payload?
You can't without reallocating the entire string because the way the arrays are declared there is no room for expansion.

BTW: neither apayload nor received_payload are null-terminated strings. When you initialize character arrays like that using individual characters the array is nothing more than an array of characters, so you can't use string functions on them such as strlen() to get the number of characters.

>>I am trying this at the moment but it does not work as I guess it is just adding "0" as a character to the array and not terminating that block all together.

Yes, that only replaces the character with 0, it does not change the array size. You will have to reallocate the array if you want to make it smaller. But I don't think its worth the effort. Just put a 0 there and treat it like any other null-terminated string.
Last edited by Ancient Dragon; Jul 4th, 2008 at 10:48 am.
Don't PM me with questions -- you might get a nasty PM in response. If you have a question then post it in one of the forums.
Reply With Quote Quick reply to this message  
Join Date: Jun 2008
Posts: 16
Reputation: adamj2 is an unknown quantity at this point 
Solved Threads: 0
adamj2 adamj2 is offline Offline
Newbie Poster

Re: quick question: how to 'null' blocks of an unsigned char array

 
0
  #3
Jul 4th, 2008
Originally Posted by Ancient Dragon View Post
>>How would I go about making the second payload exactly the same as the first payload?
You can't without reallocating the entire string because the way the arrays are declared there is no room for expansion.

BTW: neither apayload nor received_payload are null-terminated strings. When you initialize character arrays like that using individual characters the array is nothing more than an array of characters, so you can't use string functions on them such as strlen() to get the number of characters.

>>I am trying this at the moment but it does not work as I guess it is just adding "0" as a character to the array and not terminating that block all together.

Yes, that only replaces the character with 0, it does not change the array size. You will have to reallocate the array if you want to make it smaller. But I don't think its worth the effort. Just put a 0 there and treat it like any other null-terminated string.
OK, cool, thanks for that.

If I wanted to do the same sort of thing with strings but then convert it using c_str() is there a way to add to the c_str() function to do this or would I have to re-allocate etc first before using c_str()?

Ie if I wanted to convert the first 8 characters of the string using c_str() but ignore the last 2 characters, can I instruct it to do this with c_str() or would I have to change the string to get rid of characters 9 and 10 before hand?
Reply With Quote Quick reply to this message  
Join Date: Apr 2008
Posts: 296
Reputation: tesuji is on a distinguished road 
Solved Threads: 42
tesuji tesuji is offline Offline
Posting Whiz in Training

Re: quick question: how to 'null' blocks of an unsigned char array

 
0
  #4
Jul 4th, 2008
Hi

possibly you want that second array of chars behaves like first on, as in:
  1. int main() {
  2. unsigned char apayload[] = {'H','i',' ','T','h','e','r','e', '\0'};
  3. unsigned char received_payload[]={'H','i',' ','T','h','e','r','e','a', 'b','\0'};
  4. cout << apayload << " "<< received_payload << endl;
  5. received_payload[8]='\0';
  6. cout << apayload << " " << received_payload << endl;
  7. return 0;
  8. }
  9. /* result
  10. Hi There Hi Thereab
  11. Hi There Hi There
  12. */
You may consider what I added to the initialization of both arrays. Also consider this solution will produce memory leaks.

krs,
tesu
Information is moving—you know, nightly news is one way, of course, but it's also moving through the blogosphere and through the Internets. I promise you I will listen to what has been said here, even though I wasn't here. Ann and I will carry out this equivocal message to the world. I'm the master of low expectations.
Reply With Quote Quick reply to this message  
Join Date: Aug 2005
Posts: 15,358
Reputation: Ancient Dragon has a reputation beyond repute Ancient Dragon has a reputation beyond repute Ancient Dragon has a reputation beyond repute Ancient Dragon has a reputation beyond repute Ancient Dragon has a reputation beyond repute Ancient Dragon has a reputation beyond repute Ancient Dragon has a reputation beyond repute Ancient Dragon has a reputation beyond repute Ancient Dragon has a reputation beyond repute Ancient Dragon has a reputation beyond repute Ancient Dragon has a reputation beyond repute 
Solved Threads: 1463
Team Colleague
Featured Poster
Ancient Dragon's Avatar
Ancient Dragon Ancient Dragon is offline Offline
Still Learning

Re: quick question: how to 'null' blocks of an unsigned char array

 
0
  #5
Jul 4th, 2008
Originally Posted by adamj2 View Post
OK, cool, thanks for that.

If I wanted to do the same sort of thing with strings but then convert it using c_str() is there a way to add to the c_str() function to do this or would I have to re-allocate etc first before using c_str()?

Ie if I wanted to convert the first 8 characters of the string using c_str() but ignore the last 2 characters, can I instruct it to do this with c_str() or would I have to change the string to get rid of characters 9 and 10 before hand?
I guess you are talking about std::string c++ class and not character arrays.
  1. std::string = "Hello World";
  2. // now cut off the last two characters of the string
  3. string = string.substr(0, string.length()-2);
Don't PM me with questions -- you might get a nasty PM in response. If you have a question then post it in one of the forums.
Reply With Quote Quick reply to this message  
Reply

This thread is more than three months old.
Perhaps start a new thread instead?
Message:



Other Threads in the C++ Forum
Thread Tools Search this Thread



About Us | Contact Us | Advertise | DaniWeb | Acceptable Use Policy | RSS Feed

©2003 - 2009 DaniWeb® LLC