• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: wchar_t* turned into a char*?
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: wchar_t* turned into a char*?


  • Subject: Re: wchar_t* turned into a char*?
  • From: Keith Ray <email@hidden>
  • Date: Tue, 27 Jul 2004 08:19:35 -0700

(sorry about the platform question, I forgot what mailing list I was using.)

On Jul 26, 2004, at 7:05 PM, Mark Morrill wrote:

Hi all,

I've been doing some experimenting with Unicode when I found something
surprising. I'm not sure if it is how it's suppose to be or if it's a
bug...

At the end of this email is a short bit of source code that tries to
create a UTF-16 (actually UCS-2, I suppose) text file.

The marker (0xFE, 0xFF) writes out to the file as it ought.

The array 'str' writes out to the file as it ought.

No surprises so far.

The surprise comes in when I try to dump wstr as unsigned shorts. "NR[Dc"
is stored as UTF-8! Moreover, wstr is not 4 wchar_t (3 plus 1 null)
but a null terminated string of 9 chars. When I do the loop, for( i=0;
wstr[i]; i++ ), it loops 9 times! I declare wstr as wchar_t* but, I
assume, the compiler is smarter than I and decides that wstr is really
char*.


Is this how it is suppose to behave? I was expecting that wstr would
have been UCS-4 since wchar_t is 4 bytes. The source code is UTF-8
because the compiler chokes on UTF-16 (perhaps I was doing something
wrong?) What I was expecting was that the compiler would have converted
the text into UCS-4 for wchar_t or give an error saying that the text
was UTF-8 and not compatible with UCS-4.

The last thing I expected was to have my wchar_t* turned into a char*.

Mark



--- source ---

int main( int argc, char * const argv[] )
{
		const unsigned char			marker[]		= {	0xFE, 0xFF };
		const wchar_t						str[]				=
			{
					'T', 'e', 's', 't', 0
			};
		wchar_t*								wstr				= L"NR[Dc";

     std::cout << "Welcome to Test!\n";

		FILE*		out = ::fopen( "Test.out", "wt+" );

		::fwrite( marker, sizeof( char ), 2, out );

		int							i;
		unsigned short	ch;

		for( i=0; wstr[i]; i++ )
			{
				ch = (unsigned short) wstr[i];

				printf( "%x = %x\n", ch, wstr[i] );

				::fwrite( &ch, sizeof( char ), 2, out );
			}

		fprintf( out, "\n[%S] - [%S]\n", str, wstr );

		for( i=0; str[i]; i++ )
			{
				ch = (unsigned short) str[i];

				printf( "%x = %x\n", ch, str[i] );

				::fwrite( &ch, sizeof( char ), 2, out );
			}

     return 0;
}

--- output to Test.out ---

0000: FE FF 00 E6 00 88 00 91 00 E6 00 84 00 9B 00 E4 ................
0010: 00 BD 00 A0 0A 5B 54 65 73 74 5D 20 2D 20 5B E6 .....[Test] - [.
0020: 88 91 E6 84 9B E4 BD A0 5D 0A 00 54 00 65 00 73 ........]..T.e.s
0030: 00 74 .t
_______________________________________________
xcode-users mailing list | email@hidden
Help/Unsubscribe/Archives: http://www.lists.apple.com/mailman/listinfo/xcode-users
Do not post admin requests to the list. They will be ignored.



--
C. Keith Ray
<http://homepage.mac.com/keithray/blog/index.html>
<http://homepage.mac.com/keithray/xpminifaq.html>
<http://homepage.mac.com/keithray/resume2.html>
_______________________________________________
xcode-users mailing list | email@hidden
Help/Unsubscribe/Archives: http://www.lists.apple.com/mailman/listinfo/xcode-users
Do not post admin requests to the list. They will be ignored.


References: 
 >wchar_t* turned into a char*? (From: Mark Morrill <email@hidden>)

  • Prev by Date: Re: Newbie question (from Bonny Scotland)
  • Next by Date: Re: wchar_t* turned into a char*?
  • Previous by thread: wchar_t* turned into a char*?
  • Next by thread: Re: wchar_t* turned into a char*?
  • Index(es):
    • Date
    • Thread