如何将单字节字符转换为双字节

swich 2007-05-29 02:16:02
如题
...全文
2162 20 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
zbing0203 2007-06-20
  • 打赏
  • 举报
回复
你的意思是不是由一种编码转换为另一种编码 如果是这样的可以用编码转换工具
星羽 2007-06-20
  • 打赏
  • 举报
回复
int main()
{
wchar_t d;
char c;

c = 'A';
d = c;

printf("%c\t%d\n", c, sizeof(c));
printf("%c\t%d\n", d, sizeof(d));

return 0;
}


-----------------


结果

A 1
A 2
请按任意键继续. . .
Arthur_ 2007-06-20
  • 打赏
  • 举报
回复
iconv_open
iconv
iconv_close
jixingzhong 2007-06-20
  • 打赏
  • 举报
回复
mbtowc/mbstowcs

具体用法、原型,
查MSDN或其他手册 ...
jixingzhong 2007-06-20
  • 打赏
  • 举报
回复
mbtowc()
convert multibyte character to wide character
Function
SYNOPSIS DESCRIPTION PARAMETERS RETURN VALUES CONFORMANCE MULTITHREAD SAFETY LEVEL PORTING ISSUES AVAILABILITY SEE ALSO


--------------------------------------------------------------------------------

SYNOPSIS
#include <stdlib.h>

int mbtowc(wchar_t *pwc, const char *s, size_t n);


--------------------------------------------------------------------------------

DESCRIPTION
The mbtowc() function converts the multibyte character addressed by s into the corresponding UNICODE character.


--------------------------------------------------------------------------------

PARAMETERS

pwc
Is the address of a wide character, type wchar_t, to receive the UNICODE equivalent of s.

s
Points to the multibyte character to be converted to UNICODE.

n
Is the maximum width, in bytes, for which to scan s for a valid multibyte sequence. Regardless of the value of n, no more than MB_CUR_MAX bytes are examined.



--------------------------------------------------------------------------------

RETURN VALUES
If successful, mbtowc() returns the length, in bytes, of the multibyte character for which it found a UNICODE equivalent. If s is null or points to a null character, mbtowc() returns zero. If no valid multibyte sequence is found at s, mbtowc() returns -1.


--------------------------------------------------------------------------------

CONFORMANCE
ANSI/ISO 9899-1990.


--------------------------------------------------------------------------------

MULTITHREAD SAFETY LEVEL
MT-Safe, with exceptions.

This function is MT-Safe as long as no thread calls setlocale() while this function is executing.
jixingzhong 2007-06-20
  • 打赏
  • 举报
回复
Run-Time Library Reference
mbtowc, _mbtowc_l

Convert a multibyte character to a corresponding wide character.


int mbtowc(
wchar_t *wchar,
const char *mbchar,
size_t count
);
int _mbtowc_l(
wchar_t *wchar,
const char *mbchar,
size_t count,
_locale_t locale
);

Parameters
wchar
Address of a wide character (type wchar_t).

mbchar
Address of a sequence of bytes (a multibyte character).

count
Number of bytes to check.

locale
The locale to use.

Return Value

If mbchar is not NULL and if the object that mbchar points to forms a valid multibyte character, mbtowc returns the length in bytes of the multibyte character. If mbchar is NULL or the object that it points to is a wide-character null character (L'\0'), the function returns 0. If the object that mbchar points to does not form a valid multibyte character within the first count characters, it returns –1.

Remarks

The mbtowc function converts count or fewer bytes pointed to by mbchar, if mbchar is not NULL, to a corresponding wide character. mbtowc stores the resulting wide character at wchar, if wchar is not NULL. mbtowc does not examine more than MB_CUR_MAX bytes. mbtowc uses the current locale for locale-dependent behavior; _mbtowc_l is identical except that it uses the locale passed in instead.

Requirements

Routine Required header Compatibility
mbtowc
<stdlib.h>
ANSI, Windows 95, Windows 98, Windows 98 Second Edition, Windows Millennium Edition, Windows Millennium Edition, Windows NT 4.0, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003

_mbtowc_l
<stdlib.h>
ANSI, Windows 95, Windows 98, Windows 98 Second Edition, Windows Millennium Edition, Windows Millennium Edition, Windows NT 4.0, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003


For additional compatibility information, see Compatibility in the Introduction.

Libraries
All versions of the C run-time libraries.

Example

Copy Code
// crt_mbtowc.c
/* Illustrates the behavior of the mbtowc function
*/

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

int main( void )
{
int i;
char *pmbc = (char *)malloc( sizeof( char ) );
wchar_t wc = L'a';
wchar_t *pwcnull = NULL;
wchar_t *pwc = (wchar_t *)malloc( sizeof( wchar_t ) );
printf( "Convert a wide character to multibyte character:\n" );
wctomb_s( &i, pmbc, sizeof(char), wc );
printf( " Characters converted: %u\n", i );
printf( " Multibyte character: %x\n\n", *pmbc );

printf( "Convert multibyte character back to a wide "
"character:\n" );
i = mbtowc( pwc, pmbc, MB_CUR_MAX );
printf( " Bytes converted: %u\n", i );
printf( " Wide character: %x\n\n", *pwc );
printf( "Attempt to convert when target is NULL\n" );
printf( " returns the length of the multibyte character:\n" );
i = mbtowc( pwcnull, pmbc, MB_CUR_MAX );
printf( " Length of multibyte character: %u\n\n", i );

printf( "Attempt to convert a NULL pointer to a" );
printf( " wide character:\n" );
pmbc = NULL;
i = mbtowc( pwc, pmbc, MB_CUR_MAX );
printf( " Bytes converted: %u\n", i );
}
Output

Convert a wide character to multibyte character:
Characters converted: 1
Multibyte character: 61

Convert multibyte character back to a wide character:
Bytes converted: 1
Wide character: 61

Attempt to convert when target is NULL
returns the length of the multibyte character:
Length of multibyte character: 1

Attempt to convert a NULL pointer to a wide character:
Bytes converted: 0
ReverseEngineering 2007-06-20
  • 打赏
  • 举报
回复
宽字符和多字节?
spofmy 2007-05-29
  • 打赏
  • 举报
回复
ASCII -〉UNICODE?
星羽 2007-05-29
  • 打赏
  • 举报
回复
::MultiByteToWideChar()
eqxu 2007-05-29
  • 打赏
  • 举报
回复
unsigned char a = 10;
unsigned short b ;
__asm__ __volatile__(
"movb %1, %al;;\n\r"
"movzbl %al, %eax;;\n\r"
"movw %ax, %0;;\n\r"
:"=r"(b)
:"r"(a)
);
更正
eqxu 2007-05-29
  • 打赏
  • 举报
回复
unsigned char a = 10;
unsigned short b ;
__asm__ __volatile__(
"movw %1, %al;;\n\r"
"movzbl %al, %eax;;\n\r"
"movzbl %ax, %0;;\n\r"
:"=r"(b)
:"r"(a)
);
oyd 2007-05-29
  • 打赏
  • 举报
回复
如果只涉及ascii字符,就可以用上述的方法
否则还是用库来做吧
  • 打赏
  • 举报
回复
size_t mbstowcs(
wchar_t *wcstr,
const char *mbstr,
size_t count
);
contain_universe 2007-05-29
  • 打赏
  • 举报
回复
char a;
int b=0;

b=a; //b=b&a
guoshimin57 2007-05-29
  • 打赏
  • 举报
回复
譬如你要转换的字符用变量a表示:
char a;
int b;
……
b=a;
……
这时单字节字符不就变成双字节的了吗
hailongchang 2007-05-29
  • 打赏
  • 举报
回复
可以在每个单字节前面加上个0x00
swich 2007-05-29
  • 打赏
  • 举报
回复
用des加密后的密文字符串如何转换为双字节?
god_sun 2007-05-29
  • 打赏
  • 举报
回复
wchar_t?
swich 2007-05-29
  • 打赏
  • 举报
回复
如何强制转换??
lockhall 2007-05-29
  • 打赏
  • 举报
回复
什么意思?

强制转换不行?

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧