Ruby和Null-Terminated字符串

时间:2013-10-12 19:18:20

标签: ruby string unicode encoding null

我目前正在使用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

无论如何,任何帮助将不胜感激。非常感谢所有阅读此内容的人。

0 个答案:

没有答案