# Printf "%0x"

**URL:** <https://www.ruby-forum.com/t/printf-0x/126631>\
**Category:** Development\
**Created:** [January 20, 2008, 6:51pm UTC](https://www.ruby-forum.com/t/printf-0x/126631 "2008-01-20T18:51:47Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![Tanaka\_A](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/c67d28/32.png) [@Tanaka\_A](https://www.ruby-forum.com/u/Tanaka_A)\
**Post date:** [January 20, 2008, 6:51pm UTC](https://www.ruby-forum.com/t/printf-0x/126631/1 "2008-01-20T18:51:47Z")

</div>

printf e$B$Ne(B %0x e$B$KIi$N@0?t$rM?$($k$H!"CM$K$h$C$Fe(B …  
e$B$,$D$$$?$je(B  
e$B$D$+$J$+$C$?$j$7$^$9!#e(B

% ./ruby -ve ‘[-0x40000000, -0x40000001].each {|v| printf “%0x\n”, v }’  
ruby 1.9.0 (2008-01-19 revision 0) [i686-linux]  
…fc0000000  
fbfffffff

---

<div class="post-metadata">

**Author:** ![Tanaka\_A](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/c67d28/32.png) [@Tanaka\_A](https://www.ruby-forum.com/u/Tanaka_A)\
**Post date:** [January 20, 2008, 9:45pm UTC](https://www.ruby-forum.com/t/printf-0x/126631/2 "2008-01-20T21:45:54Z")

</div>

e$B$J$+$@$G$9!#e(B

At Mon, 21 Jan 2008 02:50:50 +0900,  
Tanaka A. wrote in [ruby-dev:33224]:

> printf e$B$Ne(B %0x e$B$KIi$N@0?t$rM?$($k$H!"CM$K$h$C$Fe(B … e$B$,$D$$$?$je(B  
> e$B$D$+$J$+$C$?$j$7$^$9!#e(B
> 
> % ./ruby -ve ‘[-0x40000000, -0x40000001].each {|v| printf “%0x\n”, v }’  
> ruby 1.9.0 (2008-01-19 revision 0) [i686-linux]  
> …fc0000000  
> fbfffffff

e$B$=$l0J30$K$b!"@:EY$r;XDj$9$k$HL/$J46$8$G$9!#e(B

$ ruby19 -ve ‘printf “|%1$.4x|%1$04x|%1$6.4x|\n”, -1’  
ruby 1.9.0 (2008-01-19 revision 15119) [i686-linux]  
|f…f|f…f| f…f|

test/ruby/test\_sprintf.rbe$B$K$Oe(B%be$B$N%F%9%H$7$+$J$$$N$G$9$,!“Ii$NCMe(B  
e$B$Ge(B”…"e$B$,$D$+$J$$$H$$$&$N$O%F%9%H$N$[$&$,$\*$+$7$/$J$$$G$7$g$&$+!#e(B

- sprintf.c (remove\_sign\_bits): returns pointer to the first char to  
be used, instead of copying.

- sprintf.c (rb\_str\_format): negative indicator dots should come  
before sign digits always. [ruby-dev:33224]

# Index: sprintf.c

— sprintf.c (revision 15146)  
+++ sprintf.c (working copy)  
@@ -47,10 +47,6 @@ remove\_sign\_bits(char \*str, int base)  
}  
}

- if (t \> s) {

- while (\*t) \*s++ = \*t++;

- \*s = ‘\0’;

- }

- return str;

- return t;  
}

@@ -509,8 +505,9 @@ rb\_str\_format(int argc, const VALUE \*arg  
case ‘u’:  
{

- volatile VALUE tmp1;  
volatile VALUE val = GETARG();

- char fbuf[32], nbuf[64], \*s, \*t;

- char fbuf[32], nbuf[64], \*s;  
const char \*prefix = 0;

- int sign = 0;

- int sign = 0, dots = 0;  
char sc = 0;  
long v = 0;  
@@ -613,17 +610,17 @@ rb\_str\_format(int argc, const VALUE \*arg  
sprintf(fbuf, “%%l%c”, c);  
sprintf(nbuf, fbuf, v);
- 

```
 s = nbuf;
   }
   else {
 s = nbuf;
 if (v < 0) {

```

- 

```
     strcpy(s, "..");

```

- 

```
     s += 2;

```

- 

```
     dots = 1;
 }
 sprintf(fbuf, "%%l%c", *p == 'X' ? 'x' : *p);

```

- 

```
 sprintf(s, fbuf, v);

```

- 

```
 sprintf(++s, fbuf, v);
 if (v < 0) {
     char d = 0;

```

- 

```
     remove_sign_bits(s, base);

```

- 

```
     s = remove_sign_bits(s, base);
     switch (base) {
       case 16:

```

@@ -633,10 +630,8 @@ rb\_str\_format(int argc, const VALUE \*arg  
}  
if (d && \*s != d) {

- 

```
   memmove(s+1, s, strlen(s)+1);

```

- 

```
   *s = d;

```

- 

```
   *--s = d;
     }
 }
   }

```

- 

```
   s = nbuf;

```

}  
else {  
@@ -659,5 +654,4 @@ rb\_str\_format(int argc, const VALUE \*arg  
}  
else {
- 

```
                   volatile VALUE tmp1;
 if (!RBIGNUM_SIGN(val)) {
     val = rb_big_clone(val);

```

@@ -667,24 +661,17 @@ rb\_str\_format(int argc, const VALUE \*arg  
s = RSTRING\_PTR(tmp);  
if (\*s == ‘-’) {

- 

```
     dots = 1;
     if (base == 10) {
   rb_warning("negative number for %%u specifier");
     }

```

- 

```
     remove_sign_bits(++s, base);

```

- 

```
     tmp = rb_str_new(0, 3+strlen(s));

```

- 

```
     t = RSTRING_PTR(tmp);

```

- 

```
     if (!(flags&(FPREC|FZERO))) {

```

- 

```
   strcpy(t, "..");

```

- 

```
   t += 2;

```

- 

```
     }

```

- 

```
     s = remove_sign_bits(++s, base);
     switch (base) {
       case 16:

```

- 

```
   if (s[0] != 'f') strcpy(t++, "f"); break;

```

- 

```
   if (s[0] != 'f') *--s = 'f'; break;
       case 8:

```

- 

```
   if (s[0] != '7') strcpy(t++, "7"); break;

```

- 

```
   if (s[0] != '7') *--s = '7'; break;
       case 2:

```

- 

```
   if (s[0] != '1') strcpy(t++, "1"); break;

```

- 

```
   if (s[0] != '1') *--s = '1'; break;
     }

```

- 

```
     strcpy(t, s);

```

- 

```
     s = RSTRING_PTR(tmp);
 }
   }

```

@@ -693,4 +680,8 @@ rb\_str\_format(int argc, const VALUE \*arg  
pos = -1;  
len = strlen(s);

- if (dots) {

- 

```
   prec -= 2;

```

- 

```
   width -= 2;

```

- }

- if (dots) {

- 

```
   memcpy(&buf[blen], "..", 2);

```

- 

```
   blen += 2;

```

- }  
if (!bignum && v \< 0) {  
char c = sign\_bits(base, p);  
Index: test/ruby/test\_sprintf.rb  
===================================================================  
— test/ruby/test\_sprintf.rb (revision 15146)  
+++ test/ruby/test\_sprintf.rb (working copy)  
@@ -20,15 +20,15 @@ class TestSprintf \< Test::Unit::TestCase  
assert\_equal(“0001”, sprintf("%04b", 1))  
assert\_equal(“0010”, sprintf("%04b", 2))

- assert\_equal(“1111”, sprintf("%04b", -1))

- assert\_equal("…11", sprintf("%04b", -1))

- assert\_equal(“1111”, sprintf("%.4b", -1))

- assert\_equal("…11", sprintf("%.4b", -1))

- assert\_equal(" 1111", sprintf("%6.4b", -1))

- assert\_equal(" …11", sprintf("%6.4b", -1))

- assert\_equal(“0b11”, sprintf("%#04b", -1))

- assert\_equal(“0b…1”, sprintf("%#04b", -1))

- assert\_equal(“0b1111”, sprintf("%#.4b", -1))

- assert\_equal(“0b…11”, sprintf("%#.4b", -1))

- assert\_equal(“0b1111”, sprintf("%#6.4b", -1))

- assert\_equal(“0b…11”, sprintf("%#6.4b", -1))

---

<div class="post-metadata">

**Author:** ![Tanaka\_A](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/c67d28/32.png) [@Tanaka\_A](https://www.ruby-forum.com/u/Tanaka_A)\
**Post date:** [January 24, 2008, 8:36am UTC](https://www.ruby-forum.com/t/printf-0x/126631/3 "2008-01-24T08:36:45Z")

</div>

e$B$^$D$b$He(B e$B$f$-$R$m$G$9e(B

In message “Re: [ruby-dev:33225] Re: printf “%0x””  
on Mon, 21 Jan 2008 05:45:17 +0900, Nobuyoshi N.  
[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) writes:

|At Mon, 21 Jan 2008 02:50:50 +0900,  
|Tanaka A. wrote in [ruby-dev:33224]:  
|\> printf e$B$Ne(B %0x e$B$KIi$N@0?t$rM?$($k$H!“CM$K$h$C$Fe(B … e$B$,$D$$$?$je(B  
|\> e$B$D$+$J$+$C$?$j$7$^$9!#e(B  
|\>  
|\> % ./ruby -ve ‘[-0x40000000, -0x40000001].each {|v| printf “%0x\n”, v }’  
|\> ruby 1.9.0 (2008-01-19 revision 0) [i686-linux]  
|\> …fc0000000  
|\> fbfffffff  
|  
|e$B$=$l0J30$K$b!”@:EY$r;XDj$9$k$HL/$J46$8$G$9!#e(B  
|  
|$ ruby19 -ve ‘printf “|%1$.4x|%1$04x|%1$6.4x|\n”, -1’  
|ruby 1.9.0 (2008-01-19 revision 15119) [i686-linux]  
||f…f|f…f| f…f|

e$B%3%\_%C%H$7$F$/$@$5$$!#e(B

---

<div class="post-metadata">

**Author:** ![Tanaka\_A](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/c67d28/32.png) [@Tanaka\_A](https://www.ruby-forum.com/u/Tanaka_A)\
**Post date:** [January 24, 2008, 7:55am UTC](https://www.ruby-forum.com/t/printf-0x/126631/4 "2008-01-24T07:55:15Z")

</div>

In article [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid),  
Nobuyoshi N. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) writes:

> test/ruby/test\_sprintf.rbe$B$K$Oe(B%be$B$N%F%9%H$7$+$J$$$N$G$9$,!“Ii$NCMe(B  
> e$B$Ge(B”…"e$B$,$D$+$J$$$H$$$&$N$O%F%9%H$N$[$&$,$\*$+$7$/$J$$$G$7$g$&$+!#e(B

e$B$?$7$+$K$=$s$J5$$b$7$^$9!#e(B

e$B$?$@!“e(B%0x e$B$NOC$O$b$H$b$He(B URI e$B$Ne(B inspect  
e$B$G8+$D$1$?$b$N$G!”$=e(B  
e$B$3$G$Oe(B … e$B$,$D$+$J$$$3$H$r0U?^$7$F$$$k$h$&$G$9!#e(B

e$B:#$Oe(B  
% ./ruby -ruri -e ‘p URI(“”)’  
#\<URI::Generic:0x…fdbceff44 URL:\>  
e$B$H$$$&$h$&$Ke(B … e$B$,$D$$$F$A$g$C$HJQ$J$+$s$8$G$9!#e(B

e$B$^$!!“e(BURI e$B$Ne(B inspect e$B$G$O%”%I%l%9e(B  
(e$B$G$O$J$$$1$l$I$=$l$C$]$$e(B  
e$B==O;?J?te(B) e$B$O=P$5$J$$$N$,$$$$$s$8$c$J$$$+$H$$$&5$$b$7$J$/$O$"e(B  
e$B$j$^$;$s$,!#e(B

---

<div class="post-metadata">

**Author:** ![Tanaka\_A](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/c67d28/32.png) [@Tanaka\_A](https://www.ruby-forum.com/u/Tanaka_A)\
**Post date:** [January 24, 2008, 8:53am UTC](https://www.ruby-forum.com/t/printf-0x/126631/5 "2008-01-24T08:53:12Z")

</div>

e$B$J$+$@$G$9!#e(B

At Thu, 24 Jan 2008 15:54:38 +0900,  
Tanaka A. wrote in [ruby-dev:33347]:

> #\<URI::Generic:0x…fdbceff44 URL:\>  
> e$B$H$$$&$h$&$Ke(B … e$B$,$D$$$F$A$g$C$HJQ$J$+$s$8$G$9!#e(B

e$B$3$l$Oe(BKernel#to\_se$B$r;H$($P$$$$$s$8$c$J$$$G$9$+$M!#e(B

> e$B$^$!!“e(BURI e$B$Ne(B inspect e$B$G$O%”%I%l%9e(B (e$B$G$O$J$$$1$l$I$=$l$C$]$$e(B  
> e$B==O;?J?te(B) e$B$O=P$5$J$$$N$,$$$$$s$8$c$J$$$+$H$$$&5$$b$7$J$/$O$"e(B  
> e$B$j$^$;$s$,!#e(B

e$B%G%P%C%0$N$H$-$H$+$K$O!"$J$s$+$7$i=P$F$/$l$?$[$&$,$"$j$,$?$$$s$8$ce(B  
e$B$J$$$G$7$g$&$+!#e(B

# Index: lib/uri/generic.rb

— lib/uri/generic.rb (revision 15202)  
+++ lib/uri/generic.rb (working copy)  
@@ -1104,6 +1104,7 @@ module URI  
end

- @@to\_s = Kernel.instance\_method(:to\_s)  
def inspect

- 

```
 sprintf("#<%s:%#0x URL:%s>", self.class.to_s, self.object_id, 

```

self.to\_s)

- 

```
 @@to_s.bind(self).call.sub!(/>\z/) {" URL:#{self}>"}

```

end
