C++库有专用转换函数的,不是数学运算那么简单,它与字符映射代码页有关,相同的编码,不同的代码页对应不同的字符,utf-8甚至是不定长的字符编码,而Unicode是定长的(还有Unicode-16和Unicode-32之分)。首先这不是什么位运算的问题,不过是最基本的查表法而已,但你没有完整的数据表就是白搭;其次不同的编码系统互相转换,不是一个运算法则就能搞定的,针对不同的编码,有不同的转换算法。别想这种编程了,有现成的转换库函数和API可用,你自己是搞不定的。
单是Unicode,在中文Windows下就有GB2312和Unicode-16的区别,这种系统默认的大陆编码是GB2312,转换成系统内部的Unicode-16根本就没有数学公式,完全是查表(还有很多Unicode-16没有对应的GB2312,更是无法转换,常见的?号乱码就是这种原因,故不是可以互相顛倒转换的),但系统报告给你的ANSI编码,就是GB2312。
没有绝对准确的办法从一篇未知编码的文档中识别是什么编码。
[
本帖最后由 TonyDeng 于 2013-7-21 11:07 编辑 ]