# Re: Ruby1.9String $B!%P%$%HNs$X$N%$%s%G%C%/%9!%"%/%;%9(B

**URL:** <https://www.ruby-forum.com/t/re-ruby1-9string-b-p-hns-x-n-s-g-c-9-9-b/126613>\
**Category:** Development\
**Created:** [January 20, 2008, 11:57am UTC](https://www.ruby-forum.com/t/re-ruby1-9string-b-p-hns-x-n-s-g-c-9-9-b/126613 "2008-01-20T11:57:40Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![Hisanori\_Kiryu](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/h/a183cd/32.png) [@Hisanori\_Kiryu](https://www.ruby-forum.com/u/Hisanori_Kiryu)\
**Post date:** [January 20, 2008, 11:57am UTC](https://www.ruby-forum.com/t/re-ruby1-9string-b-p-hns-x-n-s-g-c-9-9-b/126613/1 "2008-01-20T11:57:40Z")

</div>

> e$B$A$J$\_$K!"e(Bbyte e$B$N$G$O$J$/e(B bytes e$B$NJ}$,BEEv$@$H;W$$$^$9!#e(B
> 
> > s = “abcde”  
> > s.byte # "abcde"e$B$N%P%$%HNs%\*%V%8%’%/%He(B  
> > s.byte[3] # =\> 100
> 
> e$B$3$l$OB?J,e(B s.byte[3].ord e$B$G2fK}$G$-$k$N$G$O$J$$$+$H\<+J,$G$O;W$$$^$9$,!"e(B  
> e$B$$$+$,$G$7$g$&$+!#e(B

e$B$9$\_$^$;$s!#:G=i$N%a!\<%k$,D9$9$.$?$N$G!"e(B  
e$BO@E@$,$D$+$a$J$+$C$?$+$b$7$l$^$;$s!#e(B

e$B;d$N8@$$$?$+$C$?$N$O!"!Ie(BSubstringe$B$r2p$7$J$$!Ie(B  
Ruby1.8e$B$^$G$N$h$&$J!“e(B  
e$B%P%$%HNs$X$N%”%/%;%9%a%=%C%I$O$J$$$N$+$H$$$&$3$H$G$9!#e(B

e$B$=$&$$$&$b$N$,$J$$$H!“e(B[ruby-dev:33186]e$B!!$J$I$G=R$Y$?$h$&$Je(B  
e$B%S%C%H%^%C%W2hA|$K$$+$7$r$$$l$k2hA|=hM}A`:n$J$I$G!"e(B pixele$B?t!J?t%a%,$K$b$J$k!K$Ne(B10e$BG\$N8D?t$N0lJ8;ze(BStringe$B$,e(B e$B@8@.$5$l$F$7$^$&!"$H$$$&$b$N$G$7$?!#e(B e$B$3$l$OK\Ev$Ke(BHugee$B$G$O$J$$$G$7$g$&$+!)e(B e$B$3$N$h$&$JA`:n$be(BRuby1.8e$B$^$G$O!”%\*%V%8%’%/%H@8@.?t%\<%m$Ge(B  
Fixnume$B$N$\_$r;H$C$F9T$($F$$$?$N$G$9!#e(B

e$BB\>$NNc$H$7$F!“Nc$($P!”%S%k%H%$%s$5$l$F$$$J$$e(B  
e$B?7$?$J!!e(BEncodinge$B!!$r!!e(BRubye$B!!e(BScripte$B$G=q$/$H$7$?$i!“e(B  
Ruby1.9e$B$h$je(BRuby1.8e$B$^$G$Ne(BStringe$B$N$[$&$,!”$O$k$+$KAGD\>$Ke(B  
e$B$+$1$k$N$G$O$J$$$+$H$$$&LdBjDs5/$b@h$N%a!\<%k$G$O$7$F$$$^$7$?!#e(B

e$B$h$C$F!"e(Bs[3].ord e$B$d!!e(Bs.byte[3].ord  
e$B$J$I$O$D$i$9$.$k$H$$$&$H$3$m$,e(B  
e$B5DO@$N=PH/E@$J$N$G$9!#e(B

e$B$^$?!“e(B[]=e$B$,e(BStringe$B!!$be(BIntegere$B$b%”%/%;%W%H$9$k$H$$$&$N$Oe(B  
e$B$h$$$H;W$&$N$G$9$,!"e(BString#[] e$B$O$I$A$i$+$7$+JV$;$J$$$?$a!"e(B  
e$BFI$_9~$_!&=q$-9~$\_$NHsBP\>N@-$,$I$&$7$F$b$G$F$-$^$9$,!"e(B  
e$B$=$l$O2fK}$9$k$h$j;EJ}$N$J$$$3$H$G$7$g$&$+!)e(B

e$B$3$N$h$&$JLdBj$r$9$Y$F2r7h$9$k$?$a$Ke(B  
e$B$k$S$-$A$5$s$Oe(BByteArraye$B$r9M$($F$/$@$5$C$?$N$@$H;W$$$^$9!#e(B

e$B!J$H$3$m$G!!e(Bbytee$B!!$H$$$&C1?t7A$NL\>\>N$Oe(BString#bytese$B!!e(B=\>Enumerator  
e$B!!$,$b$&$"$k$+$i$G$O$J$$$G$7$g$&$+!)e(B  
e$B!!%9%Z%k%\_%9$7$d$9$$$H$$$&LdBj$O$"$k$H;W$$$^$9!#!Ke(B

e$B$h$m$7$/$\*4j$$CW$7$^$9!#e(B

---

<div class="post-metadata">

**Author:** ![Hisanori\_Kiryu](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/h/a183cd/32.png) [@Hisanori\_Kiryu](https://www.ruby-forum.com/u/Hisanori_Kiryu)\
**Post date:** [January 20, 2008, 12:45pm UTC](https://www.ruby-forum.com/t/re-ruby1-9string-b-p-hns-x-n-s-g-c-9-9-b/126613/2 "2008-01-20T12:45:08Z")

</div>

e$B%P%s%5%s$G$9!#e(B

On Jan 20, 2008, at 11:57 AM, Hisanori Kiryu wrote:

> e$B!J$H$3$m$G!!e(Bbytee$B!!$H$$$&C1?t7A$NL\>\>N$Oe(BString#bytese$B!!e(B  
> =\>Enumerator  
> e$B!!$,$b$&$"$k$+$i$G$O$J$$$G$7$g$&$+!)e(B  
> e$B!!%9%Z%k%\_%9$7$d$9$$$H$$$&LdBj$O$"$k$H;W$$$^$9!#!Ke(B

e$B$G$b$3$Ne(BEnumeratore$B$Ke(B[]e$B$r;H$&$h$&$K$J$C$?$i$$$$$se(B  
e$B$8$c$J$$$G$9$+!#e(B  
e$B$3$l$O$I$&$G$7$g$&$+!'e(B  
s = ‘a’  
s.bytes[0] # =\> 97  
s.bytes[i] = 98  
s # =\> ‘b’  
s.bytes[0] = ‘c’ # 'c’e$B$ND9$5$,e(B1e$B%P%$%H$8$c$J$+$C$?$iNc30e(B  
e$B$rH/@8e(B  
s # =\> ‘c’

e$B$=$7$Fe(B(e$B6Q\<A@-$N$?$a$G$b$"$k$,e(B)e$B$=$l$b$I$&$G$7$g$&$+!'e(B  
str.lines[i] # =\> ie$BHVL$N9TNs$rJV$9e(B  
str.chars[i] # =\> ie$BHVL$NJ8;z$rJV$9e(B (str[i]e$B$HF1$8e(B)

---

<div class="post-metadata">

**Author:** ![Hisanori\_Kiryu](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/h/a183cd/32.png) [@Hisanori\_Kiryu](https://www.ruby-forum.com/u/Hisanori_Kiryu)\
**Post date:** [January 20, 2008, 1:09pm UTC](https://www.ruby-forum.com/t/re-ruby1-9string-b-p-hns-x-n-s-g-c-9-9-b/126613/3 "2008-01-20T13:09:09Z")

</div>

> str.lines[i] # =\> ie$BHVL$N9TNs$rJV$9e(B  
> str.chars[i] # =\> ie$BHVL$NJ8;z$rJV$9e(B (str[i]e$B$HF1$8e(B)

e$B$9$\_$^$;$s!#e(B

e$B$h$/$\*$C$7$c$k$$$\_$,$o$+$j$^$;$s$G$7$?!#e(B

e$B9=J8$H$7$F$O$J$s$NLdBj$b$J$/!"e(B  
e$B;d$,I,MW$H$7$F$$$k$h$&$J$b$N$G$9$,!#e(B

Enumeratore$B0lHL$K%$%s%G%C%/%9%"%/%;%9$9$k%a%=%C%I$r2C$($ke(B  
e$B$H$$$&$o$1$G$O$J$$$N$G$9$h$M!)e(B  
e$B!Je(B[]=,[], e$B$r$b$D$h$&$J!"e(BEnumerator  
e$B$Ne(BSubClasse$B!!$+2?$+!)!Ke(B

Bytee$BNs$N\>l9g$K7W;;NL$,%9%H%j%s%0$ND9$5$K4X$7$Fe(BO(1)  
e$B$N%$%s%G%C%/%9%"%/%;%9$J$N$G$9$h$M!)e(B  
e$B$7$+$bItJ,J8;zNs$J$I$N%\*%V%8%’%/%H$rCf4V$G@8@.$7$J$$!)e(B

e$B$=$l$G$7$?$iAG@2$i$7$$$H;W$$$^$9!#e(B

---

<div class="post-metadata">

**Author:** ![Hisanori\_Kiryu](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/h/a183cd/32.png) [@Hisanori\_Kiryu](https://www.ruby-forum.com/u/Hisanori_Kiryu)\
**Post date:** [January 23, 2008, 7:00am UTC](https://www.ruby-forum.com/t/re-ruby1-9string-b-p-hns-x-n-s-g-c-9-9-b/126613/4 "2008-01-23T07:00:52Z")

</div>

e$B6M@8$5$s!"$3$s$K$A$O!#e(B

At 19:57 08/01/20, Hisanori Kiryu wrote:

> e$BO@E@$,$D$+$a$J$+$C$?$+$b$7$l$^$;$s!#e(B  
> e$B$3$N$h$&$JA`:n$be(BRuby1.8e$B$^$G$O!"%\*%V%8%'%/%H@8@.?t%\<%m$Ge(B  
> Fixnume$B$N$\_$r;H$C$F9T$($F$$$?$N$G$9!#e(B

e$B%a!\<%k$NFI$`=gHV$,%P%i%P%i$K$J$j$^$7$?$N$G!"6M@8$5$s$NA0$N%a!\<%ke(B  
e$B$rFI$^$:%a!\<%k$r=q$$$F$7$^$$$^$7$?!#e(B

e$B@N2hA|=hM}$rBgJ,$d$j$^$7$?$N$G!"LdBj$OJ,$+$j$^$9!#e(B

e$BBeF~$OJ}$,0c$&$N$G!“LdBj$r2r7h$G$-$k$,!”\<h$j=P$7$N\>l9ge(B  
e$B$ONc$($Pe(B string.get\_byte e$B$H$+$O$I$&$G$7$g$&$+!#e(B  
e$BM\>$j$+$C$3$h$/$J$/$F!"%k%S$i$7$/$J$$$G$9$,!"Aa$/$J$k$H$O;W$$$^$9!#e(B

e$B59$7$/$\*4j$$$7$^$9!#e(B Martin.

#-#-# Martin J. Du"rst, Assoc. Professor, Aoyama Gakuin University  
#-#-# [http://www.sw.it.aoyama.ac.jp](http://www.sw.it.aoyama.ac.jp)[mailto:removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

---

<div class="post-metadata">

**Author:** ![Hisanori\_Kiryu](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/h/a183cd/32.png) [@Hisanori\_Kiryu](https://www.ruby-forum.com/u/Hisanori_Kiryu)\
**Post date:** [January 20, 2008, 6:03pm UTC](https://www.ruby-forum.com/t/re-ruby1-9string-b-p-hns-x-n-s-g-c-9-9-b/126613/5 "2008-01-20T18:03:03Z")

</div>

e$B%P%s%5%s$G$9!#e(B

On Jan 20, 2008, at 12:44 PM, Vincent I. wrote:

> e$B$3$l$O$I$&$G$7$g$&$+!'e(B  
> s = ‘a’  
> s.bytes[0] # =\> 97  
> s.bytes[0] = 98  
> s # =\> ‘b’  
> s.bytes[0] = ‘c’ # 'c’e$B$ND9$5$,e(B1e$B%P%$%H$8$c$J$+$C$?$iNce(B  
> e$B30$rH/@8e(B  
> s # =\> ‘c’

e$B35G0**Z$N$?$a!":n$C$F$\_$^$7$?!#e(B  
e$BCm0U!’\<BAu$O$R$I$$!JFC$Ke(BEnumeratore$B$+$ie(BStringe$B$rFIe(B  
e$B$\_9~$`J}K!!K$7e(BRangee$B$bBP1~$G$-$J$$$G$9!J\<B$Oe(BRange  
e$B$r\<u$1$k$Y$-$+$I$&$+$O$o$+$j$^$;$s!K!#e(B**

# Index: string.c

— string.c (revision 15145)  
+++ string.c (working copy)  
@@ -4521,7 +4521,80 @@  
return str;  
}

+struct enumerator {

- VALUE method;
- VALUE proc;
- VALUE args;
- rb\_block\_call\_func \*iter;
- VALUE fib;
- VALUE dst;
- VALUE no\_next;  
+};

+static VALUE  
+rb\_str\_bytes\_aref(VALUE obj, VALUE indx)  
+{

- long idx, len;
- struct enumerator \*ptr;
- VALUE str;
- 
- Data\_Get\_Struct(obj, struct enumerator, ptr);
- 
- str = rb\_funcall(ptr-\>method, rb\_intern(“receiver”), 0);
- 
- idx = FIX2LONG(indx);
- len = RSTRING\_LEN(str);
- if (idx \< 0)
- idx += len;
- 
- if ((idx \< 0) || (idx \>= len))
- return Qnil;
- 
- return INT2FIX(RSTRING\_PTR(str)[idx] & 0xff);  
+}
- 

+static VALUE  
+rb\_str\_bytes\_aset(VALUE obj, VALUE indx, VALUE val)  
+{

- long idx, len, v;
- struct enumerator \*ptr;
- VALUE str;
- 
- Data\_Get\_Struct(obj, struct enumerator, ptr);
- 
- str = rb\_funcall(ptr-\>method, rb\_intern(“receiver”), 0);
- 
- idx = FIX2LONG(indx);
- len = RSTRING\_LEN(str);
- if (idx \< 0)
- idx += len;
- 
- if ((idx \< 0) || (idx \>= len))
- rb\_raise(rb\_eIndexError, “index %ld out of string”, FIX2LONG(indx));
- 
- switch (TYPE(val)) {
- 

```
 case T_FIXNUM:

```

- v = FIX2LONG(val);
- RSTRING\_PTR(str)[idx] = (v & 0xff);
- break;
- 
- 

```
 case T_STRING:

```

- if (RSTRING\_LEN(val) != 1) {
- 

```
 rb_raise(rb_eTypeError,

```

- 

```
    "type mismatch: the string must be one byte long",

```

- 

```
    rb_obj_classname(val));

```

- }
- RSTRING\_PTR(str)[idx] = RSTRING\_PTR(val)[0];
- break;
- 
- 

```
 default:

```

- rb\_raise(rb\_eTypeError, “type mismatch: %s given”,
- 

```
rb_obj_classname(val));

```

- }
- 
- return val;  
+}
- /\*
  - Document-method: bytes
  - call-seq:  
@@ -4553,7 +4626,14 @@  
{  
long i;

- RETURN\_ENUMERATOR(str, 0, 0);

- if (!rb\_block\_given\_p()) {
- VALUE enumerator;
- 
- enumerator = rb\_enumeratorize(str, ID2SYM(rb\_frame\_this\_func()), 0,  
0);
- rb\_define\_singleton\_method(enumerator, “[]”, rb\_str\_bytes\_aref, 1);
- rb\_define\_singleton\_method(enumerator, “[]=”, rb\_str\_bytes\_aset, 2);
- return enumerator;
- }  
for (i=0; i\<RSTRING\_LEN(str); i++) {  
rb\_yield(INT2FIX(RSTRING\_PTR(str)[i] & 0xff));  
}
