C/C++下随机生成UTF-8编码数据

Binresist 2015-12-04 03:16:47
如题,想请教诸位大神,随机产生数据的问题。
C中有一个函数叫做rand(),可以产生0-RAND_MAX范围的数据。工作原因,需要实现一个小工具,能够随机生成UTF-8编码的数据,不仅仅是数,也包括各种字符,比如各种中文字符,比如日文等等。
请教大家有什么好方案么?
目前个人小白级做法,想法源自于http://www.cnblogs.com/chenwenbiao/archive/2011/08/11/2134503.html中的关于UTF8编码的说法,通过一个7字节的unsigned char数组存储一个UTF-8字符的每个字节。
至于每个字节则按照规则,比如110开头则随机产生一个数模上32 + 192,比如10开头则模上64 + 128,然后返回这个字符串,并存入文件中。
但目前生成的数据都很不成样子,UE打开除了ASCII字符部分,剩下的基本上都是乱码。
请教诸位大神,哪里出了问题?与unsigned char有关?
分不多,略表敬意。
...全文
394 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Binresist 2015-12-31
  • 打赏
  • 举报
回复
哎,没有更好的办法了么?不过还是感谢二位的回复,谢谢啦,散分!
mLee79 2015-12-04
  • 打赏
  • 举报
回复
你应该先生成 UCS2 的字符, 再转换回 UTF8 。
赵4老师 2015-12-04
  • 打赏
  • 举报
回复
仅供参考:
// UTF-8 编码字符理论上可以最多到 6个字节长,但目前全世界的所
// 有文字和符号种类加起来也只要编到 4个字节长就够了。
//   UTF-8 是以 8位(即 1个字节)为单元对原始码进行编码(注意一
// 点:这里所讲的原始码都是指Unicode码),并规定:多字节码(2个字
// 节以上才称为多字节)以转换后第1个字节起头的连续“1”的数目(这
// 些连续“1”称为标记位),表示转换成几个字节:“110”连续两个
// “1”,表示转换结果为2个字节,“1110”表示3个字节,而“11110”
// 则表示4个字节……跟随在标记位之后的“0”,其作用是分隔标记位和
// 字符码位。第2~第4个字节的起头两个位固定设置为“10”,也作为标
// 记,剩下的6个位才做为字符码位使用。
//   这样,2字节UTF-8码剩下11个字符码位,可用以转换0080~07FF的
// 原始字符码,3字节剩下16个字符码位,可用以转换0800~FFFF的原始字
// 符码,由此类推。编码方式的模板如下:
//
// 原始码(16进制) UTF-8编码(二进制)
// --------------------------------------------
// 0000 - 007F       0xxxxxxx
// 0080 - 07FF       110xxxxx 10xxxxxx
// 0800 - FFFF       1110xxxx 10xxxxxx 10xxxxxx
// ……
// --------------------------------------------
//
//   模板中的“x”表示字符码。
//   Ascii码<007F,编为1个
// 字节的UTF-8码。汉字的 Unicode编码范围为0800-FFFF,所以被编为
// 3个字节的UTF-8码。
//   例如“汉”字的Unicode编码是6C49,6C49在0800-FFFF之间,所以
// 要用3个字节的模板:1110wwww 10xxxxyy 10yyzzzz。

//    6    C    4    9
// 0110 1100 0100 1001
// wwww xxxx yyyy zzzz
//     wwww   xxxxyy   yyzzzz
// 1110wwww 10xxxxyy 10yyzzzz。
// 11100110 10110001 10001001
//    E   6    B   1    8   9
//“汉”字的UTF-8编码是E6 B1 89

69,371

社区成员

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

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