社区
C#
帖子详情
纠结的字符问题
macdonald25
2010-09-20 10:33:17
字符串由用户输入,可能是汉字英文数字符号的组合,想把字符串转换成16进制编码,另外,还要能将这16进制编码转换成原来的字符串。
问题来了:
汉字是2byte,汉字标点符号也是2byte,数字和英文是1byte,虽然我可以将字符串分割成单个字符,根据ASCII判断是汉字还是英文数字,进而转换成16进制,但是,当将16进制转换回来的时候,该怎么判断是汉字还是字符,因为存这些数据的地方大小固定,为了存尽量多的字符,不能加其他标识符之类的东西。
卡壳在这了,各位大侠给个思路。
...全文
140
18
打赏
收藏
纠结的字符问题
字符串由用户输入,可能是汉字英文数字符号的组合,想把字符串转换成16进制编码,另外,还要能将这16进制编码转换成原来的字符串。 问题来了: 汉字是2byte,汉字标点符号也是2byte,数字和英文是1byte,虽然我可以将字符串分割成单个字符,根据ASCII判断是汉字还是英文数字,进而转换成16进制,但是,当将16进制转换回来的时候,该怎么判断是汉字还是字符,因为存这些数据的地方大小固定,为了存尽量多的字符,不能加其他标识符之类的东西。 卡壳在这了,各位大侠给个思路。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
18 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
gomoku
2010-09-20
打赏
举报
回复
看:
http://zh.wikipedia.org/zh/Gb2312
做学问的方法是一样的
macdonald25
2010-09-20
打赏
举报
回复
#16楼
如果用gb2312,那么我普通字符和数字的话,是占了一个字节还是2个字节?
gomoku
2010-09-20
打赏
举报
回复
那你用gb3212等编码。
Encoding.GetEncoding("gb2312")
macdonald25
2010-09-20
打赏
举报
回复
#14楼
ASCII字母继续使用1字节存储,重音文字、希腊字母或西里尔字母等使用2字节来存储,而常用的汉字就要使用3字节。辅助平面字符则使用4字节。
这样的编码和我的需求有冲突,汉字如果3字节的话,那么本来128bit固定大小就只能存5个汉字了。如果是汉字要能存8个,普通字符16个,如果一个汉字,那么就是15个。2个汉字14个。这样的
gomoku
2010-09-20
打赏
举报
回复
看
http://zh.wikipedia.org/zh-cn/UTF-8
macdonald25
2010-09-20
打赏
举报
回复
#7楼上善。
字符集这个确实需要指定,但是我现在的问题是要汉字2byte转换,英文字符数字1byte转换,存储之后这些数据再要转换回汉字,我如何知道哪2byte是汉字,哪1byte是英文和字符。开发的环境比较特殊,直接是用外接设备对存储单元无线读取。
米か臹
2010-09-20
打赏
举报
回复
GetBytes来回转应该都可以。
macdonald25
2010-09-20
打赏
举报
回复
#6楼。。如果我输入的字符不到标准的长度,那么,你这个方法里面的0啊,255啊都给我显示出来了。。
macdonald25
2010-09-20
打赏
举报
回复
#9楼
这样的方法,无论你字符串多长,最后都是8位的十进制,我怎么显示十六进制字符?
- -!我很菜。。
xyzflying
2010-09-20
打赏
举报
回复
直接转化成字符。
char *tmp=System.Runtime.InteropServices.Marshal.StringToHGlobalAnsi(your_string);
honkerhero
2010-09-20
打赏
举报
回复
0不是标识符的作用,汉字是双位,直接转好像不能成16进制(0-9a-f),记不清了
你可以不加标识符试试,反正你的字符串和16进制都是以byte数组为媒介,只要保证这个媒介能还原就行,怎么过去,怎么回来,没有问题的,
还有String本来就是unicode的,getBytes,字符集选UTF-16好像英文的高位都是0
烈火蜓蜻
2010-09-20
打赏
举报
回复
[Quote=引用楼主 macdonald25 的回复:]
字符串由用户输入,可能是汉字英文数字符号的组合,想把字符串转换成16进制编码,另外,还要能将这16进制编码转换成原来的字符串。
问题来了:
汉字是2byte,汉字标点符号也是2byte,数字和英文是1byte,虽然我可以将字符串分割成单个字符,根据ASCII判断是汉字还是英文数字,进而转换成16进制,但是,当将16进制转换回来的时候,该怎么判断是汉字还是字符,因为存这些数据的地方大小固定,为了……
[/Quote]
首先你需要确认你要用的是什么编码,我看一般是用UTF8比较合适,
然后呢用Encoding.UTF8.GetBytes()来获取这个字符串的bytes字节流,然后把这个字节流转换成十六进制的字符串,
而要转换回来的时候,先把十六进制的字符串,转换成字节流,然后再用Encoding.UTF8.GetString()生成原来的字符串
liulangdeyuyu
2010-09-20
打赏
举报
回复
/// <summary>
/// FormatterHelper 序列化,反序列化消息的帮助类
/// </summary>
public class FormatterHelper
{
/// <summary>
/// 对象序列化为二进制比特数组
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public static byte[] Serialize(object obj)
{
IFormatter formatter = new BinaryFormatter();
MemoryStream ms = new MemoryStream();
byte[] b;
formatter.Serialize(ms, obj);
ms.Position = 0;
b = new byte[ms.Length];
ms.Read(b, 0, b.Length);
ms.Close();
return b;
}
/// <summary>
/// 反序列化得到一个对象
/// </summary>
/// <param name="buffer"></param>
/// <returns></returns>
public static object Deserialize(byte[] buffer)
{
IFormatter formatter = new BinaryFormatter();
MemoryStream ms = new MemoryStream();
ms.Write(buffer, 0, buffer.Length);
ms.Position = 0;
object obj = formatter.Deserialize(ms);
return obj;
}
}// end class
macdonald25
2010-09-20
打赏
举报
回复
#2楼的大侠
getByte我也知道,如果里面有汉字的话,需要指定字符集,这样就是英文和数字也用双字节表示,结果还是会少存储部分信息
macdonald25
2010-09-20
打赏
举报
回复
你这个0是标识符的作用,如果可以加,我也不纠结了。我现在的需求是最大限度在有限的128位里存进字符,如果我加了0,势必会减少几位。
gomoku
2010-09-20
打赏
举报
回复
用UTF8或者Unicode编码
@井九
2010-09-20
打赏
举报
回复
GetBytes来回转应该都可以。
自己判断的话,汉字高字节跟数字和英文是能区分的
honkerhero
2010-09-20
打赏
举报
回复
这个简单啊,不用管汉字还是字母
你可以参考一下加密后如何把字符串显示为16进制,把字符串转成BYTE数组,往里边隔位插0,转换成字符串就行,回来时,把0位去掉,转成字符串就行
c语言中
字符
数组的
问题
很
纠结
啊 请教高手!!!
本文探讨了一个C语言初学者关于
字符
数组的
问题
。通过一个简单的代码示例,作者提问为何定义为3个元素的
字符
数组可以接受4个输入
字符
而不报错,直至输入
字符
达到或超过5个时才出现错误。该
问题
引导读者思考
字符
数组的边界
问题
及其背后的原因。
mysql 修改存储过程执行
字符
集_MYSQL存储过程
字符
集 一个非常
纠结
的有关
问题
本文探讨了MySQL存储过程中遇到的
字符
集
问题
,特别是在使用UTF-8时出现的乱码情况。作者尝试通过调整存储过程参数和数据类型来解决这个
问题
。
ashx页面返回json
字符
串|jQuery 的ajax处理请求的
纠结
问题
本文详细介绍了使用jQuery AJAX请求与ASP.NET .ashx页面进行数据交互时遇到的
问题
及解决方案。重点解决了AJAX请求错误进入error方法、返回json数据时JS获取为空值的
问题
,并通过正确设置Response.ContentType属性确保了JSON数据的正确传输。
算法---
字符
按ASCII排序
本文介绍了
字符
按ASCII排序的算法。先将
字符
转化为ASCII值存入list,用sort()方法排序,再将ASCII码转回
字符
输出。还提到很多同学会
纠结
排序时ASCII码与输入
字符
的对应
问题
,其实输出时再转换即可。最后附上代码和结果图。
【算法】
字符
串-洛谷
本文围绕洛谷的
字符
串算法题展开。在P5015标题统计中,作者在读取数据输入上
纠结
,最终采用直接读取一行的方式。在P5734文字处理软件题里,插入
字符
串部分反复出bug,包括思路混乱、循环条件控制
问题
等,虽通过测试但代码含bug,后给出修正方法。
C#
111,129
社区成员
642,535
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章