loveminyi 2024-05-04 22:23 采纳率: 0%
浏览 2

VFP 发送HEX编码问题

VFP使用WINSOCK控件与一些编码器进行数据取码,编码器接收的指令为HEX编码,例如指令为“010203”,使用函数CREATEBINARY(‘010203’),返回为“oh303130323033”,编码器收到编码也就成了“303130323033”,想请教怎样才能让服务器端收到真正的“010203”编码。谢谢?

img


thisform.sock2.object.SendData(CREATEBINARY(ALLTRIM(thisform.text4.Value)))

 thisform.sock2.object.SendData(CREATEBINARY(ALLTRIM(thisform.text4.Value)))  

  • 写回答

6条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-05-04 22:23
    关注

    引自免费微信小程序:皆我百晓生

    在Visual FoxPro (VFP) 中,如果你想要发送原始的HEX字符串而不经过任何转换,你需要确保在发送时保持原始格式。看起来你在接收端接收到的数据已经是正确的HEX表示,但可能是在发送前进行了某种处理。

    首先,确认一下你使用的CREATEBINARY()函数是否真的对输入的HEX字符串做了转换。这个函数通常用于创建二进制数据,而不是简单的字符串处理。如果你只是想将一个字符串转换为其对应的ASCII值,可以考虑使用其他方法。

    这里有一个简单的例子,展示如何从HEX字符串创建二进制数据并在VFP中发送它:

    * 假设你的HEX字符串存储在一个变量中
    hex_string = "010203"
    
    * 将HEX字符串转换为字节数组
    byte_array = SPACE(LEN(hex_string)/2)
    FOR i = 1 TO LEN(hex_string) STEP 2
        byte_array[i/2] = VAL(MID(hex_string, i, 2))
    ENDFOR
    
    * 创建二进制数据
    binary_data = CREATEBINARY(byte_array)
    
    * 使用WINSOCK控件发送数据
    sock = CREATEOBJECT("MSWinsock")
    sock.connect("192.168.1.89", 8899)
    sock.Send(binary_data)
    

    这段代码首先将HEX字符串分割成两字符一组,然后将其转换为对应的十进制数字并存入字节数组中。之后,使用CREATEBINARY()函数将字节数组转换为二进制数据,最后通过WINSOCK控件发送出去。

    请确保在接收端的设置正确地解析接收到的二进制数据为HEX字符串,而不是默认的ASCII或其他格式。这取决于你的编码器如何读取接收到的数据。如果在接收端仍然看到的是“303130323033”,那么问题可能出在接收端的配置上,而非发送端。在这种情况下,你应该检查接收端的设置,确保它能正确识别并显示接收到的二进制数据。

    评论 编辑记录

报告相同问题?

问题事件

  • 修改了问题 5月4日
  • 创建了问题 5月4日