📄 string.c
字号:
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;
result = p_i64tow(ulonglong2str->value, dest_wstr, ulonglong2str->base);
pRtlUnicodeStringToAnsiString(&ansi_str, &unicode_string, 1);
ok(result == dest_wstr,
"(test %d): _i64tow(%llu, [out], %d) has result %p, expected: %p\n",
test_num, ulonglong2str->value, ulonglong2str->base, result, dest_wstr);
if (ulonglong2str->mask & 0x04) {
if (memcmp(dest_wstr, expected_wstr, LARGE_STRI_BUFFER_LENGTH * sizeof(WCHAR)) != 0) {
for (pos = 0; pos < LARGE_STRI_BUFFER_LENGTH; pos++) {
expected_wstr[pos] = ulonglong2str[1].Buffer[pos];
} /* for */
expected_wstr[LARGE_STRI_BUFFER_LENGTH] = '\0';
if (memcmp(dest_wstr, expected_wstr, LARGE_STRI_BUFFER_LENGTH * sizeof(WCHAR)) != 0) {
ok(memcmp(dest_wstr, expected_wstr, LARGE_STRI_BUFFER_LENGTH * sizeof(WCHAR)) == 0,
"(test %d): _i64tow(%llu, [out], %d) assigns string \"%s\", expected: \"%s\"\n",
test_num, ulonglong2str->value, ulonglong2str->base, ansi_str.Buffer, ulonglong2str->Buffer);
} /* if */
} /* if */
} else {
ok(memcmp(dest_wstr, expected_wstr, LARGE_STRI_BUFFER_LENGTH * sizeof(WCHAR)) == 0,
"(test %d): _i64tow(%llu, [out], %d) assigns string \"%s\", expected: \"%s\"\n",
test_num, ulonglong2str->value, ulonglong2str->base, ansi_str.Buffer, ulonglong2str->Buffer);
} /* if */
pRtlFreeAnsiString(&ansi_str);
}
static void one_ui64tow_test(int test_num, const ulonglong2str_t *ulonglong2str)
{
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;
LPWSTR result;
for (pos = 0; pos < LARGE_STRI_BUFFER_LENGTH; pos++) {
expected_wstr[pos] = ulonglong2str->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;
result = p_ui64tow(ulonglong2str->value, dest_wstr, ulonglong2str->base);
pRtlUnicodeStringToAnsiString(&ansi_str, &unicode_string, 1);
ok(result == dest_wstr,
"(test %d): _ui64tow(%llu, [out], %d) has result %p, expected: %p\n",
test_num, ulonglong2str->value, ulonglong2str->base, result, dest_wstr);
ok(memcmp(dest_wstr, expected_wstr, LARGE_STRI_BUFFER_LENGTH * sizeof(WCHAR)) == 0,
"(test %d): _ui64tow(%llu, [out], %d) assigns string \"%s\", expected: \"%s\"\n",
test_num, ulonglong2str->value, ulonglong2str->base, ansi_str.Buffer, ulonglong2str->Buffer);
pRtlFreeAnsiString(&ansi_str);
}
static void test_ulonglongtow(void)
{
int test_num;
int pos;
WCHAR expected_wstr[LARGE_STRI_BUFFER_LENGTH + 1];
LPWSTR result;
for (test_num = 0; test_num < NB_ULONGLONG2STR; test_num++) {
if (ulonglong2str[test_num].mask & 0x10) {
one_i64tow_test(test_num, &ulonglong2str[test_num]);
} /* if */
if (p_ui64tow) {
if (ulonglong2str[test_num].mask & 0x20) {
one_ui64tow_test(test_num, &ulonglong2str[test_num]);
} /* if */
} /* 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_i64tow(ulong2str[0].value, NULL, 10);
ok(result == NULL,
"(test d): _i64tow(%llu, NULL, 10) has result %p, expected: NULL\n",
ulonglong2str[0].value, result);
if (p_ui64tow) {
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_ui64tow(ulong2str[0].value, NULL, 10);
ok(result == NULL,
"(test e): _ui64tow(%llu, NULL, 10) has result %p, expected: NULL\n",
ulonglong2str[0].value, result);
} /* if */
}
typedef struct {
const char *str;
LONG value;
} str2long_t;
static const str2long_t str2long[] = {
{ "1011101100", 1011101100 },
{ "1234567", 1234567 },
{ "-214", -214 },
{ "+214", 214 }, /* The + sign is allowed also */
{ "--214", 0 }, /* Do not accept more than one sign */
{ "-+214", 0 },
{ "++214", 0 },
{ "+-214", 0 },
{ "\00141", 0 }, /* not whitespace char 1 */
{ "\00242", 0 }, /* not whitespace char 2 */
{ "\00343", 0 }, /* not whitespace char 3 */
{ "\00444", 0 }, /* not whitespace char 4 */
{ "\00545", 0 }, /* not whitespace char 5 */
{ "\00646", 0 }, /* not whitespace char 6 */
{ "\00747", 0 }, /* not whitespace char 7 */
{ "\01050", 0 }, /* not whitespace char 8 */
{ "\01151", 51 }, /* is whitespace char 9 (tab) */
{ "\01252", 52 }, /* is whitespace char 10 (lf) */
{ "\01353", 53 }, /* is whitespace char 11 (vt) */
{ "\01454", 54 }, /* is whitespace char 12 (ff) */
{ "\01555", 55 }, /* is whitespace char 13 (cr) */
{ "\01656", 0 }, /* not whitespace char 14 */
{ "\01757", 0 }, /* not whitespace char 15 */
{ "\02060", 0 }, /* not whitespace char 16 */
{ "\02161", 0 }, /* not whitespace char 17 */
{ "\02262", 0 }, /* not whitespace char 18 */
{ "\02363", 0 }, /* not whitespace char 19 */
{ "\02464", 0 }, /* not whitespace char 20 */
{ "\02565", 0 }, /* not whitespace char 21 */
{ "\02666", 0 }, /* not whitespace char 22 */
{ "\02767", 0 }, /* not whitespace char 23 */
{ "\03070", 0 }, /* not whitespace char 24 */
{ "\03171", 0 }, /* not whitespace char 25 */
{ "\03272", 0 }, /* not whitespace char 26 */
{ "\03373", 0 }, /* not whitespace char 27 */
{ "\03474", 0 }, /* not whitespace char 28 */
{ "\03575", 0 }, /* not whitespace char 29 */
{ "\03676", 0 }, /* not whitespace char 30 */
{ "\03777", 0 }, /* not whitespace char 31 */
{ "\04080", 80 }, /* is whitespace char 32 (space) */
{ " \n \r \t214", 214 },
{ " \n \r \t+214", 214 }, /* Signs can be used after whitespace */
{ " \n \r \t-214", -214 },
{ "+214 0", 214 }, /* Space terminates the number */
{ " 214.01", 214 }, /* Decimal point not accepted */
{ " 214,01", 214 }, /* Decimal comma not accepted */
{ "f81", 0 },
{ "0x12345", 0 }, /* Hex not accepted */
{ "00x12345", 0 },
{ "0xx12345", 0 },
{ "1x34", 1 },
{ "-9999999999", -1410065407 }, /* Big negative integer */
{ "-2147483649", 2147483647 }, /* Too small to fit in 32 Bits */
{ "-2147483648", 0x80000000 }, /* Smallest negative integer */
{ "-2147483647", -2147483647 },
{ "-1", -1 },
{ "0", 0 },
{ "1", 1 },
{ "2147483646", 2147483646 },
{ "2147483647", 2147483647 }, /* Largest signed positive integer */
{ "2147483648", 2147483648UL }, /* Positive int equal to smallest negative int */
{ "2147483649", 2147483649UL },
{ "4294967294", 4294967294UL },
{ "4294967295", 4294967295UL }, /* Largest unsigned integer */
{ "4294967296", 0 }, /* Too big to fit in 32 Bits */
{ "9999999999", 1410065407 }, /* Big positive integer */
{ "056789", 56789 }, /* Leading zero and still decimal */
{ "b1011101100", 0 }, /* Binary (b-notation) */
{ "-b1011101100", 0 }, /* Negative Binary (b-notation) */
{ "b10123456789", 0 }, /* Binary with nonbinary digits (2-9) */
{ "0b1011101100", 0 }, /* Binary (0b-notation) */
{ "-0b1011101100", 0 }, /* Negative binary (0b-notation) */
{ "0b10123456789", 0 }, /* Binary with nonbinary digits (2-9) */
{ "-0b10123456789", 0 }, /* Negative binary with nonbinary digits (2-9) */
{ "0b1", 0 }, /* one digit binary */
{ "0b2", 0 }, /* empty binary */
{ "0b", 0 }, /* empty binary */
{ "o1234567", 0 }, /* Octal (o-notation) */
{ "-o1234567", 0 }, /* Negative Octal (o-notation) */
{ "o56789", 0 }, /* Octal with nonoctal digits (8 and 9) */
{ "0o1234567", 0 }, /* Octal (0o-notation) */
{ "-0o1234567", 0 }, /* Negative octal (0o-notation) */
{ "0o56789", 0 }, /* Octal with nonoctal digits (8 and 9) */
{ "-0o56789", 0 }, /* Negative octal with nonoctal digits (8 and 9) */
{ "0o7", 0 }, /* one digit octal */
{ "0o8", 0 }, /* empty octal */
{ "0o", 0 }, /* empty octal */
{ "0d1011101100", 0 }, /* explizit decimal with 0d */
{ "x89abcdef", 0 }, /* Hex with lower case digits a-f (x-notation) */
{ "xFEDCBA00", 0 }, /* Hex with upper case digits A-F (x-notation) */
{ "-xFEDCBA00", 0 }, /* Negative Hexadecimal (x-notation) */
{ "0x89abcdef", 0 }, /* Hex with lower case digits a-f (0x-notation) */
{ "0xFEDCBA00", 0 }, /* Hex with upper case digits A-F (0x-notation) */
{ "-0xFEDCBA00", 0 }, /* Negative Hexadecimal (0x-notation) */
{ "0xabcdefgh", 0 }, /* Hex with illegal lower case digits (g-z) */
{ "0xABCDEFGH", 0 }, /* Hex with illegal upper case digits (G-Z) */
{ "0xF", 0 }, /* one digit hexadecimal */
{ "0xG", 0 }, /* empty hexadecimal */
{ "0x", 0 }, /* empty hexadecimal */
{ "", 0 }, /* empty string */
/* { NULL, 0 }, */ /* NULL as string */
};
#define NB_STR2LONG (sizeof(str2long)/sizeof(*str2long))
static void test_wtoi(void)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -