C++里面int char 各占 4、1字节 跟多字节 unicode 存储有什么关系?

RT  ,我有一个地方不明白的就是, 我们VS平台中 一般有两种字符集  多字节 和 unicode 默认的是unicode。

         如果我选择unicode 那么存储一个字符 就是 两个字节了么?  那char类型呢? 岂不是变成两个字节了? 这理解显然是错的。但是不知道两者有什么联系,
          还有int 是4个字节 存储的 ,设置字符集  跟他没关系吧。。

现在有个问题就是  如果我下位机 接受字符 是8位 一次 也就是一个字节一个字节。  如果我是用整型 数组给他发送数据(小于255的数据) ,那岂不是会出错? 因为前面几个字节可能都是0, 所以只能采用 char数组 正好一个字节 ,是这样的吗?我觉得用整型数组发送 就算前面几个是0,也不会影响啊 ,当做是空指令 不就行了。。。

    这些概念 比较混乱  ,求大侠支支招。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Linux下,可以使用iconv库进行Unicode编码转换。下面是一个示例代码,将Unicode字符串转换成字节数组、将字节数组转换成Unicode字符串: ```c++ #include <iconv.h> #include <string.h> #include <stdio.h> int main() { // 将Unicode字符串转换成字节数组 const char *unicode_str = u8"\u4F60\u597D"; size_t unicode_len = strlen(unicode_str); size_t buf_len = unicode_len * 4; // 一个Unicode字符最多4个字节 char *buf = new char[buf_len]; memset(buf, 0, buf_len); iconv_t cd = iconv_open("UTF-8", "UCS-2LE"); char *in_buf = (char*)unicode_str; char *out_buf = buf; size_t in_len = unicode_len; size_t out_len = buf_len; int ret = iconv(cd, &in_buf, &in_len, &out_buf, &out_len); if (ret == -1) { perror("iconv"); return -1; } printf("字节数组: "); for (size_t i = 0; i < buf_len - out_len; ++i) { printf("%02X ", (unsigned char)buf[i]); } printf("\n"); // 将字节数组转换成Unicode字符串 char *byte_str = buf; size_t byte_len = buf_len - out_len; size_t unicode_buf_len = byte_len / 2 + 1; // 一个Unicode字符2个字节 char *unicode_buf = new char[unicode_buf_len]; memset(unicode_buf, 0, unicode_buf_len); cd = iconv_open("UCS-2LE", "UTF-8"); in_buf = byte_str; out_buf = unicode_buf; in_len = byte_len; out_len = unicode_buf_len; ret = iconv(cd, &in_buf, &in_len, &out_buf, &out_len); if (ret == -1) { perror("iconv"); return -1; } printf("Unicode字符串: %s\n", unicode_buf); delete[] buf; delete[] unicode_buf; return 0; } ``` 需要注意的是,iconv库只能处理单个Unicode字符,如果要处理Unicode字符串,则需要将其拆分成单个Unicode字符进行转换。上面的示例代码中,使用了UCS-2LE编码,可以根据需要修改为其他编码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值