firet Asked:2020-09-01 11:05:03 +0000 UTC2020-09-01 11:05:03 +0000 UTC 2020-09-01 11:05:03 +0000 UTC 从 char 数组中获取数字 772 有一个字符数组 ['\033', '[', '1', '5', '~'] 你需要把它翻译成数字27914953126,这些是字符的ASCII码 c 2 个回答 Voted Best Answer wololo 2020-09-01T21:08:11Z2020-09-01T21:08:11Z 我相信问题的作者有一组非负整数,他试图将其“粘合”成一个大数,如下例所示: {1} => 1, {1, 2, 3} => 123, {101, 0, 42, 314, 271} => 101042314271 例如,您可以这样做: #include <stdio.h> #include <stddef.h> #include <limits.h> typedef int src_type; typedef unsigned long long dst_type; const dst_type DST_MAX = ULLONG_MAX; dst_type array_to_number(const src_type* arr, size_t arr_size) { const dst_type OVERFLOW_VALUE1 = DST_MAX / 10; const dst_type OVERFLOW_VALUE2 = DST_MAX; dst_type res = 0; for (size_t i = 0; i < arr_size; ++i) { src_type val = arr[i]; src_type coef = 1; while (val > 9) { coef *= 10; val /= 10; } val = arr[i]; while (coef > 0) { src_type digit = val / coef; val = val - digit * coef; coef /= 10; if (res > OVERFLOW_VALUE1) { //TODO: Ошибка! Результирующее значение невозможно поместить в тип dst_type. return 0; } res *= 10; if (res > OVERFLOW_VALUE2 - digit) { //TODO: Ошибка! Результирующее значение невозможно поместить в тип dst_type. return 0; } res += digit; } } return res; } int main() { { src_type arr[5] = {'\033', '[', '1', '5', '~'}; dst_type res = array_to_number(arr, 5); printf("%llu\n", res); } { src_type arr[5] = {101, 0, 42, 314, 271}; dst_type res = array_to_number(arr, 5); printf("%llu\n", res); } return 0; } 结论: 27914953126 101042314271 Sergey 2020-09-01T12:17:49Z2020-09-01T12:17:49Z TS 非常含糊地说明了这个问题,但我强烈怀疑这是关于将计算机内存中的四个连续字节解释为整数或单个字节。就像是: #include <stdio.h> union int_to_arr { int int_value; char char_value[4]; }; int main(int argc, char *argv) { union int_to_arr z; // На РС порядок байт little-endian !!! // Целое число рассматриваем как 4 байта z.int_value = 2710; printf("Массив char: %d %d %d %d\n", z.char_value[0], z.char_value[1], z.char_value[2], z.char_value[3]); printf("Массив char: %x %x %x %x\n", z.char_value[0], z.char_value[1], z.char_value[2], z.char_value[3]); // 4 байта рассматриваем как целое z.char_value[0] = 11; z.char_value[1] = 22; z.char_value[2] = 33; z.char_value[3] = 44; printf("Переменная int: %d\n", z.int_value); printf("Переменная int: %x\n", z.int_value); }
我相信问题的作者有一组非负整数,他试图将其“粘合”成一个大数,如下例所示:
例如,您可以这样做:
结论:
TS 非常含糊地说明了这个问题,但我强烈怀疑这是关于将计算机内存中的四个连续字节解释为整数或单个字节。就像是: