几个字符串编码转换函数收藏

baidu:
<%
function URLDecode(enStr)
  dim  deStr,strSpecial
  dim  c,i,v
  deStr=""
  strSpecial="!""#$%&'()*+,/:;<=>?@[/]^`{ |}~%"
  for  i=1  to  len(enStr)
    c=Mid(enStr,i,1)
    if  c="%"  then
    v=eval("&h"+Mid(enStr,i+1,2))
    if  inStr(strSpecial,chr(v))>0  then
    deStr=deStr&chr(v)
    i=i+2
    else
    v=eval("&h"+Mid(enStr,i+1,2)+Mid(enStr,i+4,2))
    deStr=deStr&chr(v)
    i=i+5
    end  if
    else
    if  c="+"  then
    deStr=deStr&" "
    else
    deStr=deStr&c
    end  if
    end  if
  next
  URLDecode=deStr
end function
%>
---------------------
google:
<%
function U8Decode(enStr)
  '输入一堆有%分隔的字符串,先分成数组,根据utf8规则来判断补齐规则
  '输入:关 E5 85 B3  键  E9 94 AE 字   E5 AD 97
  '输出:关 B9D8  键  BCFC 字   D7D6
  dim c,i,i2,v,deStr,WeiS

  for i=1 to len(enStr)
    c=Mid(enStr,i,1)
    if c="%" then
      v=c16to2(Mid(enStr,i+1,2))
      '判断第一次出现0的位置,
      '可能是1(单字节),3(3-1字节),4,5,6,7不可能是2和大于7
      '理论上到7,实际不会超过3。
      WeiS=instr(v,"0")
      v=right(v,len(v)-WeiS)'第一个去掉最左边的WeiS个
      i=i+3
      for i2=2 to WeiS-1
        c=c16to2(Mid(enStr,i+1,2))
        c=right(c,len(c)-2)'其余去掉最左边的两个
        v=v & c
        i=i+3
      next
      if len(c2to16(v)) =4 then
        deStr=deStr & chrw(c2to10(v))
      else
        deStr=deStr & chr(c2to10(v))
      end if
      i=i-1
    else
      if c="+" then
        deStr=deStr&" "
      else
        deStr=deStr&c
      end if
    end if
  next
  U8Decode = deStr
end function

function c16to2(x)
 '这个函数是用来转换16进制到2进制的,可以是任何长度的,一般转换UTF-8的时候是两个长度,比如A9
 '比如:输入“C2”,转化成“11000010”,其中1100是"c"是10进制的12(1100),那么2(10)不足4位要补齐成(0010)。
 dim tempstr
 dim i:i=0'临时的指针

 for i=1 to len(trim(x))
  tempstr= c10to2(cint(int("&h" & mid(x,i,1))))
  do while len(tempstr)<4
   tempstr="0" & tempstr'如果不足4位那么补齐4位数
  loop
  c16to2=c16to2 & tempstr
 next
end function

function c2to16(x)
  '2进制到16进制的转换,每4个0或1转换成一个16进制字母,输入长度当然不可能不是4的倍数了

  dim i:i=1'临时的指针
  for i=1 to len(x)  step 4
   c2to16=c2to16 & hex(c2to10(mid(x,i,4)))
  next
end function

function c2to10(x)
  '单纯的2进制到10进制的转换,不考虑转16进制所需要的4位前零补齐。
  '因为这个函数很有用!以后也会用到,做过通讯和硬件的人应该知道。
  '这里用字符串代表二进制
   c2to10=0
   if x="0" then exit function'如果是0的话直接得0就完事
   dim i:i=0'临时的指针
   for i= 0 to len(x) -1'否则利用8421码计算,这个从我最开始学计算机的时候就会,好怀念当初教我们的谢道建老先生啊!
    if mid(x,len(x)-i,1)="1" then c2to10=c2to10+2^(i)
   next
end function

function c10to2(x)
'10进制到2进制的转换
  dim sign, result
  result = ""
  '符号
  sign = sgn(x)
  x = abs(x)
  if x = 0 then
    c10to2 = 0
    exit function
  end if
  do until x = "0"
    result = result & (x mod 2)
    x = x / 2
  loop
  result = strReverse(result)
  if sign = -1 then
    c10to2 = "-" & result
  else
    c10to2 = result
  end if
end function
%>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,以下是一个串口发送字符串函数示例,使用C++语言编写: ```cpp #include <Arduino.h> // 如果是在Arduino上运行,需要引入该头文件 void sendString(String message, int baudRate) { Serial.begin(baudRate); // 初始化串口通信 Serial.print(message); // 发送字符串 Serial.end(); // 结束串口通信 } ``` 该函数需要传入两个参数:要发送的字符串和波特率。函数会将字符串通过串口发送出去,发送完成后会关闭串口通信。如果在Arduino上运行该函数,需要先引入`<Arduino.h>`头文件。 希望这个函数能够帮助你! ### 回答2: 串口发送字符串函数通常需要做以下几个步骤: 1. 初始化串口参数:首先,要设置好串口的波特率、数据位、停止位和校验位等参数,以确保与接收端一致。 2. 打开串口:使用操作系统提供的串口操作函数,打开待使用的串口端口。 3. 将字符串转换为字节序列:由于串口通信是以字节为单位进行的,因此需要将字符串转换为字节序列。可以使用编码方式如UTF-8,将字符串转换为字节数组。 4. 发送数据:使用串口操作函数,将字节序列发送给指定的串口端口。可以使用操作系统提供的串口发送函数,将字节序列写入到串口缓冲区。 5. 关闭串口:在发送完数据后,要记得关闭串口,释放资源。 下面是一个简单的串口发送字符串函数示例: ```python import serial def send_string_to_serial(serial_port, string): # 初始化串口参数 serial_port.baudrate = 9600 serial_port.bytesize = serial.EIGHTBITS serial_port.stopbits = serial.STOPBITS_ONE serial_port.parity = serial.PARITY_NONE # 打开串口 serial_port.open() # 将字符串转换为字节序列 byte_array = string.encode('UTF-8') # 发送数据 serial_port.write(byte_array) # 关闭串口 serial_port.close() # 示例使用 serial_port = serial.Serial('COM1') # 替换成实际的串口号 send_string_to_serial(serial_port, "Hello, Serial!") ``` 上述代码使用Python的`serial`库来操作串口,先初始化串口参数,然后打开串口,将字符串转换为字节序列后发送出去,并最后关闭串口。在使用时,只需提供串口对象和待发送的字符串即可。 ### 回答3: 串口发送字符串函数可以使用以下代码来实现: ```c++ #include <iostream> #include <Windows.h> void SerialSendString(const char* str) { // 打开串口 HANDLE hSerial = CreateFile( "COM1", // 串口号,根据实际情况修改 GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0 ); if (hSerial == INVALID_HANDLE_VALUE) { std::cout << "无法打开串口!" << std::endl; return; } // 配置串口参数 DCB dcbSerialParams = { 0 }; dcbSerialParams.DCBlength = sizeof(DCB); dcbSerialParams.BaudRate = CBR_115200; // 波特率,根据实际情况修改 dcbSerialParams.ByteSize = 8; // 数据位 dcbSerialParams.StopBits = ONESTOPBIT; // 停止位 dcbSerialParams.Parity = NOPARITY; // 校验位 if (!SetCommState(hSerial, &dcbSerialParams)) { std::cout << "无法配置串口参数!" << std::endl; CloseHandle(hSerial); return; } // 发送字符串 DWORD bytesWritten; WriteFile(hSerial, str, strlen(str), &bytesWritten, NULL); std::cout << "已发送字符串:" << str << std::endl; // 关闭串口 CloseHandle(hSerial); } int main() { const char* str = "Hello, Serial!"; SerialSendString(str); return 0; } ``` 以上代码首先使用 `CreateFile` 函数打开串口,您需要根据实际情况修改串口号,然后使用 `SetCommState` 函数配置串口参数,例如设置波特率、数据位、停止位和校验位等。接着使用 `WriteFile` 函数发送字符串数据到串口。最后使用 `CloseHandle` 函数关闭串口。 注意事项:使用该函数需要在 Windows 系统下,并且需要包含 `<Windows.h>` 头文件。另外,编译时需要链接对应的串口库。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值