C语言宏定义中L##"STRING"

在USB字符串描述符中
在这里插入图片描述
bLength为描述符长度,bDeorType为描述符类型,字符编码统一采用UNICODE编码,UNICODE采用两个字节字节表示一个字符,如果是英语字符的话,那就很简单了,直接在ASCII码前面补上一个为0x00的字节数据就组成UNICODE编码了。

但是在C编译器中,
#define WIDE_STRING(string) _WIDE_STRING(string)
#define _WIDE_STRING(string) L##string

通过WIDE_STRING(“string”)配合wchar可以将“string”直接变成UNICODE。

#define WIDE_STRING(string) _WIDE_STRING(string)
#define _WIDE_STRING(string) L##string

#define USBD_STRING_DESC(string)
(uint8_t *)&(struct {
uint8_t _len;
uint8_t _type;
wchar_t _data[sizeof(string)];
}) {
sizeof(WIDE_STRING(string)) + 2U - 2U,
USB_DESCTYPE_STRING,
WIDE_STRING(string)
}

L"string"表示Unicode字符串,是const WCHAR *类型,一个字符有16位。而_T(“string”)的含义和_UNICODE宏定义有关,如果_UNICODE定义,则_T(“string”)和L"string"一样,否则_T(“string”)是普通字符串。

char buff[] = “string”;
WCHAR buff[]=L"string"

同时注意,在gcc中,wchar_t可以选择编译成2字节和4字节,编译选项为:-fshort-wchar

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值