我目前正在使用Source Engine协议,编写/移植库以与未来的Rails项目一起使用。
我的问题是......在这篇参考资料中,它谈到了字符串被空终止(我一直以为'\ 0')。
当我去测试这个库(我附带相关的段)时,它不起作用,因为在IRB中,它将我的空终止转换为\ u0000(unicode)。如何修复此问题以处理将要包含在UDP数据包中的数据?我认为问题与编码有关。
# Get a null ('/0') terminated string from the buffer.
def get_string
zero_byte = @buffer.index('\0',@position)
if zero_byte === nil
string = ''
else
string = get(zero_byte-@position)
@position+=1
end
string
end
基本上,它应该找到一个“空”字符,然后获取该数据块并将其作为字符串返回,然后将缓冲区中的“位置”移动到空字符,以便可以进一步读取。 / p>
当我在ERB中运行时,会发生以下情况:
2.0.0-p247 :001 > load 'source_buffer.rb'
=> true
2.0.0-p247 :002 > b = SourceBuffer.new
=> #<SourceBuffer:0x000000023d56d8>
2.0.0-p247 :003 > b.set("Source Engine Query\0")
=> 0
2.0.0-p247 :004 > b.get_string
=> ""
2.0.0-p247 :005 > b.buffer
=> "Source Engine Query\u0000"
正如您所看到的,我放入缓冲区的'\ 0'正在转换为Unicode,而这正在破坏我的IRB测试。
当完成所有操作时,这将与以下协议一起使用,不确定此时是否立即相关:
https://developer.valvesoftware.com/wiki/Server_queries
无论如何,任何帮助将不胜感激。非常感谢所有阅读此内容的人。