📄 string.c
字号:
if (ulong2str[test_num].mask & 0x01) { one_itoa_test(test_num, &ulong2str[test_num]); } /* if */ if (ulong2str[test_num].mask & 0x02) { one_ltoa_test(test_num, &ulong2str[test_num]); } /* if */ if (ulong2str[test_num].mask & 0x04) { one_ultoa_test(test_num, &ulong2str[test_num]); } /* if */ } /* for */}static void one_itow_test(int test_num, const ulong2str_t *ulong2str){ int pos; WCHAR expected_wstr[LARGE_STRI_BUFFER_LENGTH + 1]; WCHAR dest_wstr[LARGE_STRI_BUFFER_LENGTH + 1]; UNICODE_STRING unicode_string; STRING ansi_str; int value; LPWSTR result; for (pos = 0; pos < LARGE_STRI_BUFFER_LENGTH; pos++) { expected_wstr[pos] = ulong2str->Buffer[pos]; } /* for */ expected_wstr[LARGE_STRI_BUFFER_LENGTH] = '\0'; for (pos = 0; pos < LARGE_STRI_BUFFER_LENGTH; pos++) { dest_wstr[pos] = '-'; } /* for */ dest_wstr[LARGE_STRI_BUFFER_LENGTH] = '\0'; unicode_string.Length = LARGE_STRI_BUFFER_LENGTH * sizeof(WCHAR); unicode_string.MaximumLength = unicode_string.Length + sizeof(WCHAR); unicode_string.Buffer = dest_wstr; value = ulong2str->value; result = p_itow(value, dest_wstr, ulong2str->base); pRtlUnicodeStringToAnsiString(&ansi_str, &unicode_string, 1); ok(result == dest_wstr, "(test %d): _itow(%d, [out], %d) has result %p, expected: %p", test_num, value, ulong2str->base, result, dest_wstr); ok(memcmp(dest_wstr, expected_wstr, LARGE_STRI_BUFFER_LENGTH * sizeof(WCHAR)) == 0, "(test %d): _itow(%d, [out], %d) assigns string \"%s\", expected: \"%s\"", test_num, value, ulong2str->base, ansi_str.Buffer, ulong2str->Buffer); pRtlFreeAnsiString(&ansi_str);}static void one_ltow_test(int test_num, const ulong2str_t *ulong2str){ int pos; WCHAR expected_wstr[LARGE_STRI_BUFFER_LENGTH + 1]; WCHAR dest_wstr[LARGE_STRI_BUFFER_LENGTH + 1]; UNICODE_STRING unicode_string; STRING ansi_str; long value; LPWSTR result; for (pos = 0; pos < LARGE_STRI_BUFFER_LENGTH; pos++) { expected_wstr[pos] = ulong2str->Buffer[pos]; } /* for */ expected_wstr[LARGE_STRI_BUFFER_LENGTH] = '\0'; for (pos = 0; pos < LARGE_STRI_BUFFER_LENGTH; pos++) { dest_wstr[pos] = '-'; } /* for */ dest_wstr[LARGE_STRI_BUFFER_LENGTH] = '\0'; unicode_string.Length = LARGE_STRI_BUFFER_LENGTH * sizeof(WCHAR); unicode_string.MaximumLength = unicode_string.Length + sizeof(WCHAR); unicode_string.Buffer = dest_wstr; value = ulong2str->value; result = p_ltow(value, dest_wstr, ulong2str->base); pRtlUnicodeStringToAnsiString(&ansi_str, &unicode_string, 1); ok(result == dest_wstr, "(test %d): _ltow(%ld, [out], %d) has result %p, expected: %p", test_num, value, ulong2str->base, result, dest_wstr); ok(memcmp(dest_wstr, expected_wstr, LARGE_STRI_BUFFER_LENGTH * sizeof(WCHAR)) == 0, "(test %d): _ltow(%ld, [out], %d) assigns string \"%s\", expected: \"%s\"", test_num, value, ulong2str->base, ansi_str.Buffer, ulong2str->Buffer); pRtlFreeAnsiString(&ansi_str);}static void one_ultow_test(int test_num, const ulong2str_t *ulong2str){ int pos; WCHAR expected_wstr[LARGE_STRI_BUFFER_LENGTH + 1]; WCHAR dest_wstr[LARGE_STRI_BUFFER_LENGTH + 1]; UNICODE_STRING unicode_string; STRING ansi_str; unsigned long value; LPWSTR result; for (pos = 0; pos < LARGE_STRI_BUFFER_LENGTH; pos++) { expected_wstr[pos] = ulong2str->Buffer[pos]; } /* for */ expected_wstr[LARGE_STRI_BUFFER_LENGTH] = '\0'; for (pos = 0; pos < LARGE_STRI_BUFFER_LENGTH; pos++) { dest_wstr[pos] = '-'; } /* for */ dest_wstr[LARGE_STRI_BUFFER_LENGTH] = '\0'; unicode_string.Length = LARGE_STRI_BUFFER_LENGTH * sizeof(WCHAR); unicode_string.MaximumLength = unicode_string.Length + sizeof(WCHAR); unicode_string.Buffer = dest_wstr; value = ulong2str->value; result = p_ultow(value, dest_wstr, ulong2str->base); pRtlUnicodeStringToAnsiString(&ansi_str, &unicode_string, 1); ok(result == dest_wstr, "(test %d): _ultow(%lu, [out], %d) has result %p, expected: %p", test_num, value, ulong2str->base, result, dest_wstr); ok(memcmp(dest_wstr, expected_wstr, LARGE_STRI_BUFFER_LENGTH * sizeof(WCHAR)) == 0, "(test %d): _ultow(%lu, [out], %d) assigns string \"%s\", expected: \"%s\"", test_num, value, ulong2str->base, ansi_str.Buffer, ulong2str->Buffer); pRtlFreeAnsiString(&ansi_str);}static void test_ulongtow(void){ int test_num; int pos; WCHAR expected_wstr[LARGE_STRI_BUFFER_LENGTH + 1]; LPWSTR result; for (test_num = 0; test_num < NB_ULONG2STR; test_num++) { if (ulong2str[test_num].mask & 0x10) { one_itow_test(test_num, &ulong2str[test_num]); } /* if */ if (ulong2str[test_num].mask & 0x20) { one_ltow_test(test_num, &ulong2str[test_num]); } /* if */ if (ulong2str[test_num].mask & 0x40) { one_ultow_test(test_num, &ulong2str[test_num]); } /* if */ } /* for */ for (pos = 0; pos < LARGE_STRI_BUFFER_LENGTH; pos++) { expected_wstr[pos] = ulong2str[0].Buffer[pos]; } /* for */ expected_wstr[LARGE_STRI_BUFFER_LENGTH] = '\0'; result = p_itow(ulong2str[0].value, NULL, 10); ok(result == NULL, "(test a): _itow(%ld, NULL, 10) has result %p, expected: NULL", ulong2str[0].value, result); for (pos = 0; pos < LARGE_STRI_BUFFER_LENGTH; pos++) { expected_wstr[pos] = ulong2str[0].Buffer[pos]; } /* for */ expected_wstr[LARGE_STRI_BUFFER_LENGTH] = '\0'; result = p_ltow(ulong2str[0].value, NULL, 10); ok(result == NULL, "(test b): _ltow(%ld, NULL, 10) has result %p, expected: NULL", ulong2str[0].value, result); for (pos = 0; pos < LARGE_STRI_BUFFER_LENGTH; pos++) { expected_wstr[pos] = ulong2str[0].Buffer[pos]; } /* for */ expected_wstr[LARGE_STRI_BUFFER_LENGTH] = '\0'; result = p_ultow(ulong2str[0].value, NULL, 10); ok(result == NULL, "(test c): _ultow(%ld, NULL, 10) has result %p, expected: NULL", ulong2str[0].value, result);}#define ULL(a,b) (((ULONGLONG)(a) << 32) | (b))typedef struct { int base; ULONGLONG value; const char *Buffer; int mask; /* ntdll/msvcrt: 0x01=i64toa, 0x02=ui64toa, 0x04=wrong _i64toa try next example */ /* 0x10=i64tow, 0x20=ui64tow, 0x40=wrong _i64tow try next example */} ulonglong2str_t;static const ulonglong2str_t ulonglong2str[] = { {10, 123, "123\0---------------------------------------------------------------", 0x33}, { 2, 0x80000000U, "10000000000000000000000000000000\0----------------------------------", 0x33}, { 2, -2147483647, "1111111111111111111111111111111110000000000000000000000000000001\0--", 0x33}, { 2, -65537, "1111111111111111111111111111111111111111111111101111111111111111\0--", 0x33}, { 2, -65536, "1111111111111111111111111111111111111111111111110000000000000000\0--", 0x33}, { 2, -65535, "1111111111111111111111111111111111111111111111110000000000000001\0--", 0x33}, { 2, -32768, "1111111111111111111111111111111111111111111111111000000000000000\0--", 0x33}, { 2, -32767, "1111111111111111111111111111111111111111111111111000000000000001\0--", 0x33}, { 2, -2, "1111111111111111111111111111111111111111111111111111111111111110\0--", 0x33}, { 2, -1, "1111111111111111111111111111111111111111111111111111111111111111\0--", 0x33}, { 2, 0, "0\0-----------------------------------------------------------------", 0x33}, { 2, 1, "1\0-----------------------------------------------------------------", 0x33}, { 2, 10, "1010\0--------------------------------------------------------------", 0x33}, { 2, 100, "1100100\0-----------------------------------------------------------", 0x33}, { 2, 1000, "1111101000\0--------------------------------------------------------", 0x33}, { 2, 10000, "10011100010000\0----------------------------------------------------", 0x33}, { 2, 32767, "111111111111111\0---------------------------------------------------", 0x33}, { 2, 32768, "1000000000000000\0--------------------------------------------------", 0x33}, { 2, 65535, "1111111111111111\0--------------------------------------------------", 0x33}, { 2, 100000, "11000011010100000\0-------------------------------------------------", 0x33}, { 2, 234567, "111001010001000111\0------------------------------------------------", 0x33}, { 2, 300000, "1001001001111100000\0-----------------------------------------------", 0x33}, { 2, 524287, "1111111111111111111\0-----------------------------------------------", 0x33}, { 2, 524288, "10000000000000000000\0----------------------------------------------", 0x33}, { 2, 1000000, "11110100001001000000\0----------------------------------------------", 0x33}, { 2, 10000000, "100110001001011010000000\0------------------------------------------", 0x33}, { 2, 100000000, "101111101011110000100000000\0---------------------------------------", 0x33}, { 2, 1000000000, "111011100110101100101000000000\0------------------------------------", 0x33}, { 2, 1073741823, "111111111111111111111111111111\0------------------------------------", 0x33}, { 2, 2147483646, "1111111111111111111111111111110\0-----------------------------------", 0x33}, { 2, 2147483647, "1111111111111111111111111111111\0-----------------------------------", 0x33}, { 2, 2147483648U, "10000000000000000000000000000000\0----------------------------------", 0x33}, { 2, 2147483649U, "10000000000000000000000000000001\0----------------------------------", 0x33}, { 2, 4294967294U, "11111111111111111111111111111110\0----------------------------------", 0x33}, { 2, 0xFFFFFFFF, "11111111111111111111111111111111\0----------------------------------", 0x33}, { 2, ULL(0x1,0xffffffff), "111111111111111111111111111111111\0---------------------------------", 0x33}, { 2, ((ULONGLONG)100000)*100000, "1001010100000010111110010000000000\0--------------------------------", 0x33}, { 2, ULL(0x3,0xffffffff), "1111111111111111111111111111111111\0--------------------------------", 0x33}, { 2, ULL(0x7,0xffffffff), "11111111111111111111111111111111111\0-------------------------------", 0x33}, { 2, ULL(0xf,0xffffffff), "111111111111111111111111111111111111\0------------------------------", 0x33}, { 2, ((ULONGLONG)100000)*1000000, "1011101001000011101101110100000000000\0-----------------------------", 0x33}, { 2, ULL(0x1f,0xffffffff), "1111111111111111111111111111111111111\0-----------------------------", 0x33}, { 2, ULL(0x3f,0xffffffff), "11111111111111111111111111111111111111\0----------------------------", 0x33}, { 2, ULL(0x7f,0xffffffff), "111111111111111111111111111111111111111\0---------------------------", 0x33}, { 2, ULL(0xff,0xffffffff), "1111111111111111111111111111111111111111\0--------------------------", 0x33}, { 8, 0x80000000U, "20000000000\0-------------------------------------------------------", 0x33}, { 8, -2147483647, "1777777777760000000001\0--------------------------------------------", 0x33}, { 8, -2, "1777777777777777777776\0--------------------------------------------", 0x33}, { 8, -1, "1777777777777777777777\0--------------------------------------------", 0x33}, { 8, 0, "0\0-----------------------------------------------------------------", 0x33}, { 8, 1, "1\0-----------------------------------------------------------------", 0x33}, { 8, 2147483646, "17777777776\0-------------------------------------------------------", 0x33}, { 8, 2147483647, "17777777777\0-------------------------------------------------------", 0x33}, { 8, 2147483648U, "20000000000\0-------------------------------------------------------", 0x33}, { 8, 2147483649U, "20000000001\0-------------------------------------------------------", 0x33}, { 8, 4294967294U, "37777777776\0-------------------------------------------------------", 0x33}, { 8, 4294967295U, "37777777777\0-------------------------------------------------------", 0x33}, {10, 0x80000000U, "2147483648\0--------------------------------------------------------", 0x33}, {10, -2147483647, "-2147483647\0-------------------------------------------------------", 0x55}, {10, -2147483647, "-18446744071562067969\0---------------------------------------------", 0x00}, {10, -2147483647, "18446744071562067969\0----------------------------------------------", 0x22}, {10, -2, "-2\0----------------------------------------------------------------", 0x55}, {10, -2, "-18446744073709551614\0---------------------------------------------", 0x00}, {10, -2, "18446744073709551614\0----------------------------------------------", 0x22}, {10, -1, "-1\0----------------------------------------------------------------", 0x55}, {10, -1, "-18446744073709551615\0---------------------------------------------", 0x00}, {10, -1, "18446744073709551615\0----------------------------------------------", 0x22}, {10, 0, "0\0-----------------------------------------------------------------", 0x33}, {10, 1, "1\0-----------------------------------------------------------------", 0x33}, {10, 12, "12\0----------------------------------------------------------------", 0x33}, {10, 123, "123\0---------------------------------------------------------------", 0x33}, {10, 1234, "1234\0--------------------------------------------------------------", 0x33}, {10, 12345, "12345\0-------------------------------------------------------------", 0x33}, {10, 123456, "123456\0------------------------------------------------------------", 0x33}, {10, 1234567, "1234567\0-----------------------------------------------------------", 0x33}, {10, 12345678, "12345678\0----------------------------------------------------------", 0x33}, {10, 123456789, "123456789\0---------------------------------------------------------", 0x33}, {10, 2147483646, "2147483646\0--------------------------------------------------------", 0x33}, {10, 2147483647, "2147483647\0--------------------------------------------------------", 0x33}, {10, 2147483648U, "2147483648\0--------------------------------------------------------", 0x33}, {10, 2147483649U, "2147483649\0--------------------------------------------------------", 0x33}, {10, 4294967294U, "4294967294\0--------------------------------------------------------", 0x33}, {10, 4294967295U, "4294967295\0--------------------------------------------------------", 0x33}, {10, ULL(0x2,0xdfdc1c35), "12345678901\0-------------------------------------------------------", 0x33}, {10, ULL(0xe5,0xf4c8f374), "987654321012\0------------------------------------------------------", 0x33}, {10, ULL(0x1c0,0xfc161e3e), "1928374656574\0-----------------------------------------------------", 0x33}, {10, ULL(0xbad,0xcafeface), "12841062955726\0----------------------------------------------------", 0x33}, {10, ULL(0x5bad,0xcafeface), "100801993177806\0---------------------------------------------------", 0x33}, {10, ULL(0xaface,0xbeefcafe), "3090515640699646\0--------------------------------------------------", 0x33}, {10, ULL(0xa5beef,0xabcdcafe), "46653307746110206\0-------------------------------------------------", 0x33}, {10, ULL(0x1f8cf9b,0xf2df3af1), "142091656963767025\0------------------------------------------------", 0x33},
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -