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);