SF bug #1224347:  int/long unification and hex()

Hex longs now print with lowercase letters like their int counterparts.
diff --git a/Objects/longobject.c b/Objects/longobject.c
index e4fc553..1f328dd 100644
--- a/Objects/longobject.c
+++ b/Objects/longobject.c
@@ -1090,7 +1090,7 @@
 			assert(accumbits >= basebits);
 			do {
 				char cdigit = (char)(accum & (base - 1));
-				cdigit += (cdigit < 10) ? '0' : 'A'-10;
+				cdigit += (cdigit < 10) ? '0' : 'a'-10;
 				assert(p > PyString_AS_STRING(str));
 				*--p = cdigit;
 				accumbits -= basebits;
@@ -1144,7 +1144,7 @@
 				digit nextrem = (digit)(rem / base);
 				char c = (char)(rem - nextrem * base);
 				assert(p > PyString_AS_STRING(str));
-				c += (c < 10) ? '0' : 'A'-10;
+				c += (c < 10) ? '0' : 'a'-10;
 				*--p = c;
 				rem = nextrem;
 				--ntostore;
diff --git a/Objects/stringobject.c b/Objects/stringobject.c
index 176e0d2b..8a9dc52 100644
--- a/Objects/stringobject.c
+++ b/Objects/stringobject.c
@@ -3753,18 +3753,12 @@
 	}
 
 	/* Fix up case for hex conversions. */
-	switch (type) {
-	case 'x':
-		/* Need to convert all upper case letters to lower case. */
+	if (type == 'X') {
+		/* Need to convert all lower case letters to upper case.
+		   and need to convert 0x to 0X (and -0x to -0X). */
 		for (i = 0; i < len; i++)
-			if (buf[i] >= 'A' && buf[i] <= 'F')
-				buf[i] += 'a'-'A';
-		break;
-	case 'X':
-		/* Need to convert 0x to 0X (and -0x to -0X). */
-		if (buf[sign + 1] == 'x')
-			buf[sign + 1] = 'X';
-		break;
+			if (buf[i] >= 'a' && buf[i] <= 'x')
+				buf[i] -= 'a'-'A';
 	}
 	*pbuf = buf;
 	*plen = len;