Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   C Programming (http://www.velocityreviews.com/forums/f42-c-programming.html)
-   -   \x used with no following hex digits (http://www.velocityreviews.com/forums/t443766-x-used-with-no-following-hex-digits.html)

abhi147@gmail.com 07-31-2006 08:58 AM

\x used with no following hex digits
 
Hi ,

I have a program where I want to print a string
"457e31b2db200dc125f3e00886ff57de"
like "\x45\x7e\x31\xb2\xdb\x20\x0d\xc1\x25\xf3\xe0\x08\ x86\xff\x57\xde"
.. But in each and every case it is giving an error :

test.c:16:9 : \x used with no following hex digits

*********Test.c****************
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>
#include <wchar.h>

int main(int argc, char* argv[])
{
int i;
unsigned char mbBuf[16] = "457e31b2db200dc125f3e00886ff57de";
for(i=0;i<16;i++)
printf("\x%02",mbBuf[i]);
}

Need help !!


Walter Roberson 07-31-2006 09:00 AM

Re: \x used with no following hex digits
 
In article <1154336312.512283.284350@m79g2000cwm.googlegroups .com>,
<abhi147@gmail.com> wrote:
> I have a program where I want to print a string
>"457e31b2db200dc125f3e00886ff57de"
>like "\x45\x7e\x31\xb2\xdb\x20\x0d\xc1\x25\xf3\xe0\x08\ x86\xff\x57\xde"


> printf("\x%02",mbBuf[i]);


printf("\\x%02",mbBuf[i]);

When you want a \ to appear in the output string, you have to
escape the \ by doubling it.
--
"No one has the right to destroy another person's belief by
demanding empirical evidence." -- Ann Landers

Martin Ambuhl 07-31-2006 10:10 AM

Re: \x used with no following hex digits
 
abhi147@gmail.com wrote:
> Hi ,
>
> I have a program where I want to print a string
> "457e31b2db200dc125f3e00886ff57de"
> like "\x45\x7e\x31\xb2\xdb\x20\x0d\xc1\x25\xf3\xe0\x08\ x86\xff\x57\xde"
> . But in each and every case it is giving an error :


[OP's code at EOM]

#include <stdio.h>

int main(void)
{
unsigned char mbBuf[] = "457e31b2db200dc125f3e00886ff57de";
unsigned i, n = sizeof mbBuf - 1;
for (i = 0; i < n; i += 2)
printf("\\x%c%c", mbBuf[i], mbBuf[i + 1]);
return 0;
}



[OP's code]
> test.c:16:9 : \x used with no following hex digits
>
> *********Test.c****************
> #include <stdio.h>
> #include <stdlib.h>
> #include <string.h>
> #include <locale.h>
> #include <wchar.h>
>
> int main(int argc, char* argv[])
> {
> int i;
> unsigned char mbBuf[16] = "457e31b2db200dc125f3e00886ff57de";
> for(i=0;i<16;i++)
> printf("\x%02",mbBuf[i]);
> }


Giorgio Silvestri 07-31-2006 10:15 AM

Re: \x used with no following hex digits
 

"Walter Roberson" <roberson@ibd.nrc-cnrc.gc.ca> ha scritto nel messaggio
news:eakgre$a2o$1@canopus.cc.umanitoba.ca...
> In article <1154336312.512283.284350@m79g2000cwm.googlegroups .com>,
> <abhi147@gmail.com> wrote:
> > I have a program where I want to print a string
> >"457e31b2db200dc125f3e00886ff57de"
> >like "\x45\x7e\x31\xb2\xdb\x20\x0d\xc1\x25\xf3\xe0\x08\ x86\xff\x57\xde"

>
> > printf("\x%02",mbBuf[i]);

>
> printf("\\x%02",mbBuf[i]);


Wrong code. You don't print mbBuf[i].

>
> When you want a \ to appear in the output string, you have to
> escape the \ by doubling it.



#include <stdio.h>
#include <stdlib.h>

int main(void)
{
int i;
/* even number of chars !!! */
unsigned char mbBuf[] = "457e31b2db200dc125f3e00886ff57de";

for(i=0;i<(sizeof(mbBuf) / sizeof(mbBuf[0]))/2;i++) {
printf("\\x%c%c",mbBuf[2*i],mbBuf[2*i+1]);
}
printf("\n");
return EXIT_SUCCESS;
}


--
Giorgio Silvestri
DSP/Embedded/Real Time OS (RTOS) Software Engineer





Martin Ambuhl 07-31-2006 10:20 AM

Re: \x used with no following hex digits
 
Martin Ambuhl wrote:
> abhi147@gmail.com wrote:
>> Hi ,
>>
>> I have a program where I want to print a string
>> "457e31b2db200dc125f3e00886ff57de"
>> like "\x45\x7e\x31\xb2\xdb\x20\x0d\xc1\x25\xf3\xe0\x08\ x86\xff\x57\xde"
>> . But in each and every case it is giving an error :

>
> [OP's code at EOM]
>
> #include <stdio.h>
>
> int main(void)
> {
> unsigned char mbBuf[] = "457e31b2db200dc125f3e00886ff57de";
> unsigned i, n = sizeof mbBuf - 1;

^^^
should be 2. Sorry.
[e.g. if mbBuf[] = "1234", the last pair begins at mbBuf[2].
sizeof mbBuf is 5, n = 3, and 2 is the largest integer
less than 3]. Or I could set n = strlen(mbBuf) - 1 instead,
but only at the cost of an extra function call and #including
<string.h>.]

> for (i = 0; i < n; i += 2)
> printf("\\x%c%c", mbBuf[i], mbBuf[i + 1]);
> return 0;
> }
>
>
>
> [OP's code]
>> test.c:16:9 : \x used with no following hex digits
>>
>> *********Test.c****************
>> #include <stdio.h>
>> #include <stdlib.h>
>> #include <string.h>
>> #include <locale.h>
>> #include <wchar.h>
>>
>> int main(int argc, char* argv[])
>> {
>> int i;
>> unsigned char mbBuf[16] = "457e31b2db200dc125f3e00886ff57de";
>> for(i=0;i<16;i++)
>> printf("\x%02",mbBuf[i]); }


Giorgio Silvestri 07-31-2006 10:22 AM

Re: \x used with no following hex digits
 

"Martin Ambuhl" <mambuhl@earthlink.net> ha scritto nel messaggio
news:4j638bF6abdkU1@individual.net...
> abhi147@gmail.com wrote:
> > Hi ,
> >
> > I have a program where I want to print a string
> > "457e31b2db200dc125f3e00886ff57de"
> > like "\x45\x7e\x31\xb2\xdb\x20\x0d\xc1\x25\xf3\xe0\x08\ x86\xff\x57\xde"
> > . But in each and every case it is giving an error :

>
> [OP's code at EOM]
>
> #include <stdio.h>
>
> int main(void)
> {
> unsigned char mbBuf[] = "457e31b2db200dc125f3e00886ff57de";
> unsigned i, n = sizeof mbBuf - 1;
> for (i = 0; i < n; i += 2)
> printf("\\x%c%c", mbBuf[i], mbBuf[i + 1]);
> return 0;
> }


It could not work.

Missing:

printf("\n"); /* :-) */

before

return 0;


--
Giorgio Silvestri
DSP/Embedded/Real Time OS (RTOS) Software Engineer





Martin Ambuhl 07-31-2006 10:31 AM

Re: \x used with no following hex digits
 
Giorgio Silvestri wrote:
> "Martin Ambuhl" <mambuhl@earthlink.net> ha scritto nel messaggio
> news:4j638bF6abdkU1@individual.net...
>> abhi147@gmail.com wrote:
>>> Hi ,
>>>
>>> I have a program where I want to print a string
>>> "457e31b2db200dc125f3e00886ff57de"
>>> like "\x45\x7e\x31\xb2\xdb\x20\x0d\xc1\x25\xf3\xe0\x08\ x86\xff\x57\xde"
>>> . But in each and every case it is giving an error :

>> [OP's code at EOM]
>>
>> #include <stdio.h>
>>
>> int main(void)
>> {
>> unsigned char mbBuf[] = "457e31b2db200dc125f3e00886ff57de";
>> unsigned i, n = sizeof mbBuf - 1;
>> for (i = 0; i < n; i += 2)
>> printf("\\x%c%c", mbBuf[i], mbBuf[i + 1]);
>> return 0;
>> }

>
> It could not work.
>
> Missing:
>
> printf("\n"); /* :-) */
>
> before
>
> return 0;


Thanks for pointing out one of (at least) two errors in an extremely
simple program. I shouldn't offer advice after being up three days.

Keith Thompson 07-31-2006 10:40 AM

Re: \x used with no following hex digits
 
"Giorgio Silvestri" <giorgiosilvestri@libero.it> writes:
[...]
> It could not work.
>
> Missing:
>
> printf("\n"); /* :-) */
>
> before
>
> return 0;


It could work. Whether a trailing '\n' is required for a text stream
is implementation-defined.

--
Keith Thompson (The_Other_Keith) kst-u@mib.org <http://www.ghoti.net/~kst>
San Diego Supercomputer Center <*> <http://users.sdsc.edu/~kst>
We must do something. This is something. Therefore, we must do this.

abhi147@gmail.com 07-31-2006 10:41 AM

Re: \x used with no following hex digits
 
Martin Ambuhl wrote:
> Giorgio Silvestri wrote:
> > "Martin Ambuhl" <mambuhl@earthlink.net> ha scritto nel messaggio
> > news:4j638bF6abdkU1@individual.net...
> >> abhi147@gmail.com wrote:
> >>> Hi ,
> >>>
> >>> I have a program where I want to print a string
> >>> "457e31b2db200dc125f3e00886ff57de"
> >>> like "\x45\x7e\x31\xb2\xdb\x20\x0d\xc1\x25\xf3\xe0\x08\ x86\xff\x57\xde"
> >>> . But in each and every case it is giving an error :
> >> [OP's code at EOM]
> >>
> >> #include <stdio.h>
> >>
> >> int main(void)
> >> {
> >> unsigned char mbBuf[] = "457e31b2db200dc125f3e00886ff57de";
> >> unsigned i, n = sizeof mbBuf - 1;
> >> for (i = 0; i < n; i += 2)
> >> printf("\\x%c%c", mbBuf[i], mbBuf[i + 1]);
> >> return 0;
> >> }

> >
> > It could not work.
> >
> > Missing:
> >
> > printf("\n"); /* :-) */
> >
> > before
> >
> > return 0;

>
> Thanks for pointing out one of (at least) two errors in an extremely
> simple program. I shouldn't offer advice after being up three days.


Thanks a lot to all of you . Although it solved the question i had
asked .. But now i m stuck with another problem related to the query .

Actually when i put a "\x" manually in front of every two digits in the
string the string gets printed as "¦ñ²±Z˜-=§ßÉ¢Sp{¦"

The code which prints these special characters is :

int main(int argc, char* argv[])
{
char mbBuf[BUF_SIZE] =
"\xb2\xa4\xfd\xf1\x5a\xf7\xc4\xf2\x15\xe1\x90\x9b\ xe4\x70\x7b\xdb";

printf("\nThe mbBuf string is %s\n",mbBuf);

}

but when i print the string "b2a4fdf15af7c4f215e1909be4707bdb" with
the \x using the for loop it doesn't print those special chars :-(


Richard Heathfield 07-31-2006 11:05 AM

Re: \x used with no following hex digits
 
Keith Thompson said:

> "Giorgio Silvestri" <giorgiosilvestri@libero.it> writes:
> [...]
>> It could not work.
>>
>> Missing:
>>
>> printf("\n"); /* :-) */
>>
>> before
>>
>> return 0;

>
> It could work. Whether a trailing '\n' is required for a text stream
> is implementation-defined.


Yes, but I think this is a translation issue. It seems to me that maybe
Giorgio probably meant "it might not work", perhaps.

--
Richard Heathfield
"Usenet is a strange place" - dmr 29/7/1999
http://www.cpax.org.uk
email: rjh at above domain (but drop the www, obviously)


All times are GMT. The time now is 11:21 AM.

Powered by vBulletin®. Copyright ©2000 - 2013, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.