bingruoice 发表于 2008-05-27 10:50

uinicode的翻译问题,不明白

我看到有个说明书这样写:

报文是: 测试信息

译 码 为 : 08606D559C53D18D22 ( 08 是 报 文 译 码 后 长 度 , 数 据606D559C53D18D22是“测试信息”的unicode编码,按照内存的编码格式倒过来了)。

不太明白是怎样按照内存编码格式倒转的。我用 unicode转化器得到‘测试信息’编码的是4B6DD58BE14F6F60

希望能帮个忙解释一下

nmap 发表于 2008-05-27 10:50

不好意思,前几天到外地去了,没及时回复。

在UltraEdit里面捣鼓了一下,“测试信息”四个字
的UNICODE编码的确是,
0x4B 0x6D 0xD5 0x8B 0xE1 0x4F 0x6F 0x60

“0x60 0x6D 0x55 0x9C 0x53 0xD1 0x8D 0x22”
这段报文是怎样编的码,我就不知道了。但可以肯定的
是,不会是“测试信息”四字的网络字节序。猜测是某种
加密变换。

bingruoice,你能否给出这本说明书上面,关于这段描
述的上下文?


PS:刚才仔细看了一下,我回复的帖子里面有个
错误,网络字节序的"abc"字符串存储的顺
序正确形式是

内存地址       编码      内容
00000000    0x63      c
00000001    0x62      b
00000002    0x61      a

而littel endian 的则是

内存地址       编码      内容
00000000    0x61      a
00000001    0x62      b
00000002    0x63      c

nmap 发表于 2008-05-27 11:20

Unicode是国际字符集编码,和内存没什么关系。

可能你的问题是指Big-endian和littel-endian。
Big-endian是网络字节序,即低位在前,比如ASCII
的abc三个字符,加载到内存里面,
编码就是0x61 0x62 0x63

但littel-endian则是高位在前,同样abc三个字符,加载
到内存,编码则是0x63 0x62 0x61。

bingruoice 发表于 2008-05-28 09:21

回复 #2 nmap 的帖子

嗯确实是倒转了一下,可是不明白怎么倒转的

bingruoice 发表于 2008-05-30 09:10

在顶一下,我还是不明白啊~~说的具体点,谢谢大家了~~两位两位转的吗?

bingruoice 发表于 2008-06-13 10:29

帮我再看看啊~~5555555

nicozhou 发表于 2008-06-14 14:05

小端:低位在低地址

大端:低位在高地址

UNICODE一个字占两字节,当然是两位两位的转,比如:“震”的UNICODE是0x9707,你就要转成0x0797。

下面的宏可以帮你转。

#define HTONS(n) (((((unsigned short)(n) & 0xFF)) << 8) | (((unsigned short)(n) & 0xFF00) >> 8))
#define NTOHS(n) (((((unsigned short)(n) & 0xFF)) << 8) | (((unsigned short)(n) & 0xFF00) >> 8))

#define HTONL(n) (((((unsigned long)(n) & 0xFF)) << 24) | \
                  ((((unsigned long)(n) & 0xFF00)) << 8) | \
                  ((((unsigned long)(n) & 0xFF0000)) >> 8) | \
                  ((((unsigned long)(n) & 0xFF000000)) >> 24))

#define NTOHL(n) (((((unsigned long)(n) & 0xFF)) << 24) | \
                  ((((unsigned long)(n) & 0xFF00)) << 8) | \
                  ((((unsigned long)(n) & 0xFF0000)) >> 8) | \
                  ((((unsigned long)(n) & 0xFF000000)) >> 24))
页: [1]
查看完整版本: uinicode的翻译问题,不明白