あおきです。

ruby 1.8.0 2003-03-20 で

  sprintf('%02x', ?\n) == "fa"

になります。以下の部分を戻したらとりあえず直りました。

Index: sprintf.c
===================================================================
RCS file: /home/aamine/cvs/ruby/ruby/sprintf.c,v
retrieving revision 1.31
diff -u -p -r1.31 sprintf.c
--- sprintf.c	20 Mar 2003 06:27:13 -0000	1.31
+++ sprintf.c	20 Mar 2003 15:35:20 -0000
@@ -556,9 +556,8 @@ rb_f_sprintf(argc, argv)
 		    }
 		}
 		else {
-		    char c = sign_bits(base, p);
 		    while (len < prec--) {
-			buf[blen++] = c;
+			buf[blen++] = '0';
 		    }
 		}
 		PUSH(s, len);

元の意図を汲むのは面倒そうなのでパス  (^^;;;
-------------------------------------------------------------------
青木峰郎