ruby c расширениями: значения символов более 127 - PullRequest
4 голосов
/ 24 апреля 2010

Я пытаюсь создать расширение C для Ruby, которое включает метод, возвращающий строку, которая иногда будет иметь символьные значения, которые должны быть в unsigned char. В http://github.com/shyouhei/ruby/blob/trunk/README.EXT, все функции, перечисленные для преобразования строк C в строки Ruby, принимают подписанные символы. Поэтому я не смог этого сделать:

unsigned char bytes[] = {0xf0, 0xf1, 0xf2};
return rb_str_new(bytes, 3);

Как я могу создать метод, который возвращает эти типы строк? Другими словами, как бы я сделал расширение C с методом, возвращающим "\xff"?

1 Ответ

1 голос
/ 25 апреля 2010

Я понял, что ruby ​​будет рассматривать отрицательные символы как их беззнаковый эквивалент при использовании rb_str_new. Таким образом, вы можете просто привести массив байтов к char *.

unsigned char bytes[] = {0xf0, 0xf1, 0xf2};
return rb_str_new((char *)bytes, 3);
...