需要将 16 位数据转换为 8 位
Need to convert 16 bit data to 8 bit
int main()
{
char str[200] = {0};
char out[500] = {0};
str[0]=0x00; str[1]=0x52; str[2]=0x00; str[3]=0x65; str[4]=0x00; str[5]=0x73; str[6]= 0x00; str[7]=0x74;
for(int i=0;i<sizeof(str);i++)
cout<<"-"<<str[i];
changeCharEncoding("UCS-2","ISO8859-1",str,out,sizeof(out));
cout<<"noutput : "<<out;
for(int i=0;i<sizeof(out);i++)
cout<<":"<<out[i];
}
//encoding function
int changeCharEncoding(const char *from_charset, const char *to_charset, const char *input, char *output, int out_size)
{
size_t input_len = 8;
size_t output_len = out_size;
iconv_t l_cd;
if ((l_cd = iconv_open (to_charset, from_charset)) == (iconv_t) -1)
{
return -1;
}
int rc = iconv(l_cd, (char **)&input, &input_len, (char **)&output, &output_len);
if (rc == -1)
{
iconv_close(l_cd);
return -2;
}
else
{
iconv_close(l_cd);
}
}
请告诉我一种将 16 位数据转换为 8 位数据的方法。我已经使用图标尝试过。如果还有其他事情要做,也建议我。
看起来您正在尝试在UTF-16
和UTF-8
编码之间进行转换:尝试将changeCharEncoding()
电话更改为:
changeCharEncoding("UTF-16","UTF-8",str,out,sizeof(out));
生成的UTF-8
输出应为
刀攀猀琀
附带说明一下:代码中有几个事情需要考虑改进。例如,changeCharEncoding
和 main
都声明为返回int
而您的实现则不返回。
一般来说 - 你不能将任意 16 位数据转换为 8 位数据,你会丢失一些数据
如果您尝试转换编码 - 相同的规则适用,因为您无法将某些符号转换为 8 位 ASCII,因此它们将丢失,对于不同的平台,您可以使用不同的函数:
Windows: WideCharToMultiByte
*尼克斯:图标
我怀疑你有一个字节序问题:尝试更改它
changeCharEncoding("UCS-2","ISO8859-1",str,out,sizeof(out));
对此
changeCharEncoding("UCS-2BE","ISO8859-1",str,out,sizeof(out));
相关文章:
- 防止主数据类型C++的隐式转换
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 如何在C++中将十六进制字符串转换为文本数据
- 将复杂的非基元C++数据类型转换为 Erlang/Elixir 格式,以使用 NIF 导出方法
- 从'size_t'转换为"常量双倍",可能会丢失数据
- 将传入的网络"char*"数据转换为"uint8_t"并返回的安全方法是什么?
- Static_cast转换为错误的数据类型,但结果仍然正确?
- 使用带有链表的堆栈数据结构将中缀转换为后缀
- PyTorch C++将数据转换为张量失败
- 使用从文件(stod、strtod、atof)中提取的数据C++从字符串转换为双精度.csv
- 虚拟成员函数的定义是否强制在同一转换单元中动态初始化静态数据成员?
- 如何使用 dart:ffi 将 Uint8List 转换为 C 等效数据类型
- 如何索引转换后的用户数据值?
- 使用 OpenCV 和 Android NDK 转换数据格式
- 如何转换数据结构以在 c++ 中转换字符*
- C++读取文件并转换数据
- 在C++中为C库强制转换数据类型
- 在C++中,关于位移和强制转换数据类型
- 最有效的方式转换数据帧到矩阵,反之亦然