小编Ale*_* L.的帖子

C99 printf中的可变前导零

我在C99写了一个Multiprecision Library.根据我的代码编译的平​​台,我选择不同的表示基础.

所以,例如,假设在平台X上系统选择BASE = 100; 在平台上Y BASE = 10000;

假设我代表大的unsigned int如下:

typedef struct a {
       big_enough_uint *digits;
       unsigned int length;
       unsigned int last;
} bigUint;
Run Code Online (Sandbox Code Playgroud)

所以,当我在BASE-100系统上时,我想要我的打印功能

void my_print(bigUint *A){
     unsigned int i=0;

     fprintf(stdout,"%d",A->digits[0]);
     if(i!= A->last){
          for(;i<=A->last;i++)
                fprintf(stdout,"%02d",A->digits[i]);
     }
     printf(stdout,"\n");
}
Run Code Online (Sandbox Code Playgroud)

在BASE-10000系统上,我希望它是类似的

void my_print(bigUint *A){
     unsigned int i=0;

     fprintf(stdout,"%d",A->digits[0]);
     if(i!= A->last){
          for(;i<=A->last;i++)
                fprintf(stdout,"%04d",A->digits[i]);
     }
     printf(stdout,"\n");
}
Run Code Online (Sandbox Code Playgroud)

我为什么要这样做?

假设我有以下数字:

12345600026789
Run Code Online (Sandbox Code Playgroud)

在BASE-100表示​​中,数字数组将是(小端形式):

12|34|56|0|2|67|89
         ^ ^ I want ONE LEADING ZEROES
Run Code Online (Sandbox Code Playgroud)

在BASE-10000中:

12|3456|2|6789
        ^ I want THREE LEADING ZEROES
Run Code Online (Sandbox Code Playgroud)

有一个简单的方法吗?

c printf

6
推荐指数
1
解决办法
1561
查看次数

为什么要将Matlab枚举强制转换为int32?

今天,我进入了以下代码片段:

classdef (Enumeration,Sealed) ClassBlabla < int8
    enumeration
        ALPHA(0)
        BETA(1)
        GAMMA(2)
    end

    methods (static)
        function ret = doSomething()
            ret = containers.Map(.......)
            for i = int32(ClassBlabla.ALPHA):int32(ClassBlabla.GAMMA)
                ret(i) = somethingelse(blablabla(i))
            end
         end
    end
end
Run Code Online (Sandbox Code Playgroud)

for中的int32(...)是什么?演员?为什么要转换为int32?ALPHA已经不是0,GAMMA已经是2吗?

matlab enumeration casting

5
推荐指数
1
解决办法
632
查看次数

标签 统计

c ×1

casting ×1

enumeration ×1

matlab ×1

printf ×1