2010-04-24 71 views
4

我想为Ruby做一个C扩展,它包含一个返回字符串的方法,该字符串有时需要在unsigned char中有字符值。在http://github.com/shyouhei/ruby/blob/trunk/README.EXT中,将C字符串转换为Ruby字符串所列出的所有函数都带有带符号的字符。所以我不能这样做:ruby​​ c扩展:字符值超过127

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

我怎么能做一个方法,返回这些类型的字符串?换句话说,我将如何使用返回"\xff"的方法进行C扩展?

+0

什么,如果你只是删除在上面的代码'unsigned'问题? – 2010-04-24 20:30:35

+0

@ Marc-Andre Lafortune - 删除'unsigned'不会让我使用大于127的值,因为它们会变成负数。 – Adrian 2010-04-24 23:23:50

+3

'char'与'signed char'实际上不是同一个类型 - 它是一个与'unsigned char'和'signed char'不同的类型,并且它是否被签名是实现定义的。 – caf 2010-04-25 07:35:03

回答

1

我发现在使用rb_str_new时,ruby会将负面字符视为无符号等价字符。因此,您可以将字节数组转换为char *

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