字符串大、小端互换,VFP有没有更优雅的算法?
我们知道,将字符串在ANSI与Unicode之间相互转换,VFP提供了Strconv()函数,只不过,此函数有个小小的遗憾:只能转换Unicode LE(小端),无法转换Unicode BE(大端)。
至于什么是“大端、小端”,讲出来有段古,有兴趣的网友不妨百度一下“《格利佛游记》小人国的战争”。
C语言有现成的大、小端转换函数:
#include <winsock.h>
#pragma comment(lib, "ws2_32.lib")
uint32_t htonl(uint32_t hostlong);
uint16_t htons(uint16_t hostshort);
uint32_t ntohl(uint32_t netlong);
uint16_t ntohs(uint16_t netshort);
VFP可能要自己写一个:
*--------------------
function LE2BE(lcString)
* 将传入的字符串,以2个字节为1组,左右反转
#if .f.
lcANSI = "我是ANSI字符串"
lcUnicode_LE = strconv(lcANSI, 5) &&将双字节字符转换为 UNICODE (LE)
lcUnicode_BE = LE2BE(lcUnicode_LE) &&将UNICODE (LE)转为UNICODE (BE)
#endif .f.
local lnLen, lcReturn, i
lnLen = int(len(lcString)/2)*2 &&容错处理:确保字符串长度为偶数
lcReturn = ""
for i = 1 to lnLen step 2
lcReturn = lcReturn + substr(lcString, i+1, 1) + substr(lcString, i, 1)
endfor i
return lcReturn
*--------------------
这函数本质上是以16位整型数表示的Unicode字符,高字节右移8位,低字节左移8位。
C语言可直接用<<和>>,直接将16位整型数的高、低字节,分别左移8位和右移8位即可。
至于VFP,我不太清楚有无类似简洁优雅的整型数方式来处理字符串?