Hi Carl,

Why not using -[NSString dataUsingEncoding:]? It would be better perf wise than 
constructing a bytes array like you do.

As Josh mentioned, the fact that the String class can hold arbitrary data (not 
only characters) is a design issue of Ruby that we unfortunately need to follow 
for compatibility purposes. Fortunately, all Ruby strings in MacRuby are 
NSStrings and the Cocoa APIs can be easily used to retrieve NSData objects.

I thought about adding a convenience method on String to return NSDatas, but 
Strings already respond to dataUsingEncoding: , so I'm not sure if another 
method is needed. On the other side, NSData objects respond to #to_str which 
returns a Ruby string (with BINARY encoding).

Laurent

On May 28, 2010, at 10:03 AM, Carl Lerche wrote:

> Hello,
> 
> I've been playing around with macruby a bunch and I hit a point of
> confusion. I basically did "....".pack("H*") which returns a ruby
> string. This string is an ASCII-8BIT encoded ruby string which is an
> alias for a Binary string (aka, it has no encoding). IMO, this should
> really be backed by an NSData class as opposed to an NSString class
> because it doesn't make much sense. In fact, it's pretty much
> impossible to get any useful information out of an ASCII-8BIT encoded
> ruby string from the objective-c side of things.
> 
> To get around this, I did the following:
> 
> class String
>  def to_data
>    return NSData.data unless length > 0
> 
>    bytes = self.bytes.to_a
>    p = Pointer.new_with_type("char *", bytes.length)
> 
>    bytes.each_with_index do |char, i|
>      p[i] = char
>    end
> 
>    NSData.dataWithBytes(p, length:bytes.length)
>  end
> end
> 
> I'm not sure what the solution to this is, but I thought I'd bring up
> the issue on the mailing list.
> 
> Thanks,
> -carl
> _______________________________________________
> MacRuby-devel mailing list
> [email protected]
> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel

_______________________________________________
MacRuby-devel mailing list
[email protected]
http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel

Reply via email to