Tag: 数据转换

在C中通过命令行传递整数?

我想知道是否有人可以解释如何通过命令行传递参数? 我真的很困惑它是如何工作的。 现在我正试图将一个整数传递给主程序。 我该怎么做呢? 编辑:继续获取初始化从指针生成整数而没有强制转换[-Wint-conversion]错误? #include #define PI 3.1416 int main (int argc, char *argv[]) { double r,area, circ; char a = argv[1]; int num = a – ‘0’; printf(“You have entered %d”,num); r= num/2; area = PI * r * r; circ= 2 * PI * r; printf (“A circle with a diameter of […]

如何改进打印各种整数类型的缓冲区大小?

将整数转换为文本时,通常我会创建一个大缓冲区以与sprintf()一起使用来保存任何可能的结果。 char BigBuffer[50]; sprintf(BugBuffer, “%d”, SomeInt); 我想更节省空间,当然还有便携性,所以替代50 ,找到了替代方案: (sizeof(integer_type)*CHAR_BIT*0.302) + 3 // 0.0302 about log10(2) #define USHORT_DECIMAL_BUFN ((size_t) (sizeof(unsigned short)*CHAR_BIT*0.302) + 3) #define INT_DECIMAL_BUFN ((size_t) (sizeof(int) *CHAR_BIT*0.302) + 3) #define INTMAX_DECIMAL_BUFN ((size_t) (sizeof(intmax_t) *CHAR_BIT*0.302) + 3) int main() { char usbuffer[USHORT_DECIMAL_BUFN]; sprintf(usbuffer, “%hu”, USHRT_MAX); printf(“Size:%zu Len:%zu %s\n”, sizeof(usbuffer), strlen(usbuffer), usbuffer); char ibuffer[INT_DECIMAL_BUFN]; sprintf(ibuffer, “%d”, INT_MIN); […]

printf语句中转换的百分比如何?

也许这不属于SO,但我不知道在哪里。 我必须用C重新实现printf(3)而不使用任何可以为我做转换的函数,我差不多完成了,但是我被困在%a ,我真的不明白这里发生了什么,例如: printf(“%a\n”, 3.0); //#=> 0x1.8p+1 printf(“%a\n”, 3.1); //#=> 0x1.8cccccccccccdp+1 printf(“%a\n”, 3.2); //#=> 0x1.999999999999ap+1 printf(“%a\n”, 3.3); //#=> 0x1.a666666666666p+1 printf(“%a\n”, 3.4); //#=> 0x1.b333333333333p+1 printf(“%a\n”, 3.5); //#=> 0x1.cp+1 printf(“%a\n”, 3.6); //#=> 0x1.ccccccccccccdp+1 我当然读到了那个说: double参数被舍入并在样式[ – ] 0xh.hhhp [+ – ] d中转换为hex表示法,其中hex点字符后面的位数等于精度规范。 但这并没有真正帮助我不理解将3.2转换为1.999999999999ap+1 我不需要任何代码,但更多的解释。 PS:如果这不是这个问题的地方,你可以指引我到正确的地方吗? 编辑:虽然@juhist答案适用于数字> = 1.0但它没有解释如何获得0.0和1.0之间的数字的结果: printf(“%a\n”, 0.01); //#=> 0x1.47ae147ae147bp-7 printf(“%a\n”, 0.1); //#=> 0x1.999999999999ap-4 printf(“%a\n”, […]

快速整数到十进制转换

给定(无符号)整数,将它转换为包含十进制表示的字符串的最常用方法是什么? 这种天真的做法是重复除以10,直到你达到零。 我不喜欢这种方法,因为它 使用整数除法,它在某些集成平台上既慢又不可用 要求程序员在之后翻转字符串。 这使所需的内存操作数量翻倍。 我想到了以下方法将整数转换为十进制基数。 这是一个好主意吗? 这是如何在printf这样的printf常见实现中完成的? #include const static uint64_t i64_tab[20] = { 1u, 10u, 100u, 1000u, 10000u, 100000u, /* 10^ 5 */ 1000000u, 10000000u, 100000000u, 1000000000u, 10000000000u, /* 10^10 */ 100000000000u, 1000000000000u, 10000000000000u, 100000000000000u, 1000000000000000u, /* 10^15 */ 10000000000000000u, 100000000000000000u, 1000000000000000000u, 10000000000000000000u /* 10^19 */ }; void uint64_to_string(char *out, uint64_t in) […]