進位制數及其相互轉換

来源:https://www.cnblogs.com/cs-whut/archive/2022/11/24/16919069.html
-Advertisement-
Play Games

之前我們已經知道什麼是 數組(一維數組)java 基礎——數組,數組的存取 這裡補充一點: 數組本身是引用數據類型 ,數組的元素 可以是 基本數據類型 跟 引用數據類型 那麼?什麼是二維數組 ? 官方定義:以一維數組作為一維數組元素的數組 要是有點繞,不好理解,沒關係,簡單來說,就是一維數組裡面存一 ...


1.進位制數

        日常生活中人們都採用十進位數,十進位數用0、1、2、3、4、5、6、7、8、9十個數位表示數值;其基數為10,規則逢十進一,借一當十。

        電腦中採用二進位數,二進位數只用兩個數位0和1來表示數值;其基數為2,規則逢二進一,借一當二。

        由於二進位數書寫比較麻煩,因此,電腦中通常又用八進位數或十六進位數來書寫和表示信息。

        八進位數用0、1、2、3、4、5、6、7八個數位表示數值;其基數為8,規則逢八進一,借一當八。

        十六進位數用0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F十六個數位表示數值(在這十六個數位中的A、B、C、D、E、F六個數位,分別代表十進位數中的10、11、12、13、14、15,這是國際上通用的表示法);其基數為16,規則逢十六進一,借一當十六。

        一般來說,若把它們統稱為 R進位,則R進位制具有下列特點:

        (1)在R進位中,具有R個數字元號,它們是0,l,…,(R- 1)。

        (2)在R進位中,由低位向高位是按逢R進一的規則進行計數。

        (3)R進位的基數是R,R進位數的第 i位的權為Ri ,約定整數最低位的位序號i為0(i=n,…2,l,0,-l,-2…)。

        基數和位權是進位制數的兩個要素。所謂某進位制的基數是指該進位制中允許選用的基本數位的個數。不同進位制具有不同的基數,基數表明瞭某一進位制的基本特征,例如對於二進位,有兩個數位(0,1),且由低位向高位是逢二進一,故其基數為2。對於某一進位制數,一個數位處在數的不同位置時,它所代表的數值是不同的。例如在十進位數333中,數字3在個位數位置上時表示3,即3×100;數字3在十位數位置上時表示30,即3×101;數字3在百位數位置上時表示300,即3×102。可見每個數位所表示的數值等於該數位乘以一個與數位所在位置有關的常數,這個常數叫位權。位權的大小是以基數為底、數位所在位置的序號為指數的整數次冪。位權表明瞭同一數字元號處於不同數位時所代表的值不同。

        一般而言,對於任意的R進位數

        An-1An-2…A1A0 . A-1A-2…A-m (其中n為整數位數,m為小數位數)

        可以表示為以下和式:

        An-1×Rn-1 +…+A1×R1+A0×R0+A-1×R-1+…A-m×R-m (其中R為基數)

        上式稱為按權展開式

        我們可以用圓括弧外的下標值(如:10、2、8、16)表示該括弧內的數是哪一個進位制中的數,或在數的最後加上字母D(十進位、D可省略)、B(二進位)、Q(八進位)、H(十六進位)來區分其前面的數是屬於哪個進位制。例如,十進位數25可以表示為(25)10或25D或25;二進位數101可以表示為101B或(101)2

2.進位制數的相互轉換

        同一個數值可以用不同的進位制數表示,例如對於十進位數12,可以表示為二進位數1100,可以表示為八進位數14,也可以表示為十六進位數0C。這表明不同進位制只是表示數的不同手段,它們之間必定可以相互轉換。下麵具體介紹電腦中常用的幾種進位制數之間的轉換,即十進位與二進位數之間的轉換,十進位與八進位或十六進位數之間的轉換。

        (1)十進位數轉換為二進位數

        十進位數轉換為二進位數的基本方法是:對於整數採用除2取餘,對於小數採用乘2取整。具體做法為:對於十進位數整數,用2連續除要轉換的十進位整數及各次所得之商,直除到商等於0時為止,則各次所得之餘數即為所求二進位整數由低位到高位的值;對於十進位小數,用2連續乘要轉換的十進位小數及各次所得之積的小數部分,直乘到積的小數部分為0(或滿足所要求的精度)時為止,則各次所得之積的整數部分即為所求二進位小數由高位到低位的值。當十進位數包含有整數和小數兩部分時,可分別將整數和小數轉換,然後相加。

        例1  將十進位數53.375轉換成二進位數。

      

        於是, 53.375 = 110101.011B 。

        (2)二進位數轉換為十進位數

        二進位數轉換為十進位數的基本方法是將二進位數的各位按權展開相加。

        例2   將二進位數11011.101轉換成十進位數

        11011.101B =1×24+1×23+0×22+1×21+1×20+1×2-1+0×2-2+1×2-3

                            =16+8+0+2+1+0.5+0+0.125 =27.625

        於是, 11011.101B =27.625  。

【例1】逆序的二進位數

問題描述

把一個十進位整數轉換成二進位,然後將其二進位倒過來得到的新的數的十進位是多少?

例如,十進位整數6的二進位數為110,逆序後為011,去掉前導0,得到的新數為11,對應的十進位數為3。

輸入

輸入第1行為一個整數T(1≤T≤100),表示測試用例的組數。

之後T行,每行為1個十進位整數X(0≤X≤231−1)。

輸出

二進位數逆序後得到的新的十進位數。

輸入樣例

3

6

8

1

輸出樣例

3

1

1

         (1)編程思路。

        直接採用除2取餘的方法將輸入的十進位整數轉換為二進位數保存到a數組中,a[0]保存二進位數的最低位。之後將數組a中保存的二進位數位按權值展開即得到逆序後的十進位數。

        (2)源程式。

#include <stdio.h>
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int n;
        scanf("%d",&n);
        int a[32];
        int len=0;      // 保存n對應的二進位的位數
        while(n)        // 將n轉換為二進位數並保存到數組a中
        {
            a[len++] = n%2;
            n/=2;
        }
        int k;
        for (k=0;k<len && a[k]==0; k++) ;  // 去掉前導0
        int i,ans = 0;
        for (i=k;i<len;i++)     // 去掉前導0後,a[k]~a[len-1]正好是逆序後的二進位數
        {
            ans=ans*2+a[i];
        }
        printf("%d\n",ans);
    }
    return 0;
}

        將上面的源程式提交給“http://acm.hdu.edu.cn/showproblem.php?pid=5142  NPY and FFT”,可以Accepted。

        (3)十進位數轉換為R進位數

        類似於十進位數轉換為二進位數的方法,十進位數轉換為R進位數的基本方法是:對於整數採用除R取餘,對於小數採用乘R取整。具體做法為:對於十進位數整數,用R連續除要轉換的十進位整數及各次所得之商,直除到商等於0時為止,則各次所得之餘數即為所求R進位整數由低位到高位的值;對於十進位小數,用R連續乘要轉換的十進位小數及各次所得之積的小數部分,直乘到積的小數部分為0(或滿足所要求的精度)時為止,則各次所得之積的整數部分即為所求R進位小數由高位到低位的值。當十進位數包含有整數和小數兩部分時,可分別將整數和小數轉換,然後相加。

       (4)R進位數轉換為十進位數

        R進位數轉換為十進位數的基本方法是將R進位數的各位按權展開,然後進行十進位數相加即可。

【例2】十進位數轉換為M進位數

問題描述

將一個十進位數X(1<=X<=10^9)轉換成任意進位數M(2<=M<=16)。

輸入

一行兩個正整數X和M。

輸出

輸出X的M進位的表示。

輸入樣例

31 16

輸出樣例

1F

        (1)編程思路1。

          直接採用除M取餘的方法將十進位整數X轉換為M進位數。

        (2)源程式1。

#include <stdio.h>
#include <string.h>
char table[16]="0123456789ABCDEF";
int main()
{
    int x,m;
    scanf("%d%d",&x,&m);
    char num[33];
    int i,j,k=0;
    do {
        num[k++]=table[x%m];
        x/=m;
    } while (x!=0);
    num[k]='\0';
    for (i=0,j=k-1;i<j;i++,j--)
    {
        char ch;
        ch=num[i]; num[i]=num[j]; num[j]=ch;
    }
    printf("%s\n",num);
    return 0;
}

        (3)編程思路2。

        由於採用除M取餘時,所得M進位數是按餘數逆序排列的。因此,可以採用遞歸演算法完成轉換。

        (4)源程式2。

#include <stdio.h>
#include <string.h>
char table[16]="0123456789ABCDEF";
void change(int n,int m)
{
    if (n==0) return ;
    change(n/m,m);
    printf("%c",table[n%m]);
}
int main()
{
    int x,m;
    scanf("%d%d",&x,&m);
    if (x==0)
       printf("0\n");
    else
        change(x,m);
    return 0;
}

 【例3】A+B

問題描述

輸入兩個不超過8位的十六進位整數,求它們的和並轉換為十進位數輸出。

註:十六進位數中的10~15分別用大寫的英文字母A、B、C、D、E、F表示或小寫的英文字母a、b、c、d、e、f表示。

輸入

輸入包括多組測試用例,每組測試用例占1行,為兩個十六進位整數A和B。

輸出

對每組測試用例,輸出一行。為A+B的十進位數。

輸入樣例

1 9

A B

a b

輸出樣例

10

21

21

        (1)編程思路。 

          編寫函數int hex2dec(char hex[])將保存在字元串hex中的十六進位整數按權值展開,轉換為十進位整數作為函數值返回。

        (2)源程式。

#include <stdio.h>
#include <string.h>
int hex2dec(char hex[])
{
    int i,num,s=0;
    for (i=0;hex[i]!='\0';i++)
    {
        if (hex[i]>='0' && hex[i]<='9')
           num=hex[i]-'0';
        else if (hex[i]>='A' && hex[i]<='Z')
            num=hex[i]-'A'+10;
        else
            num=hex[i]-'a'+10;
        s=s*16+num;
    }
    return s;
}
int main()
{
    char a[10],b[10];
    while(scanf("%s%s",a,b)!=EOF)
    {
        int x;
         x=hex2dec(a)+hex2dec(b);
         printf("%d\n",x);
    }
    return 0;
}

        將上面的源程式提交給http://acm.hdu.edu.cn/showproblem.php?pid=1720 A+B Coming,可以Accepted。

【例4】可進行數制轉換的計算器

 問題描述

 某計算器能夠在不同數制之間進行轉換。該計算器顯示屏有7位,除了數字0到9之外,它的按鈕還包括大寫字母A到F,因此它將支持基數2至16的不同進位。

請為該計算器編寫不同進位的數的轉換程式。

輸入

輸入包含多組測試用例。每個測試用例占1行,每行將有三個數字。第一個數字是要轉換的數。第二個數字是要轉換的數的基數。第三個數字是要轉換後的數字的基數。

輸出

輸出將僅是計算器顯示屏上顯示的轉換後的數字。數字應在7位顯示屏中右對齊。如果數字太長而無法顯示在顯示屏上,則在顯示屏上右對齊輸出“ERROR”(不帶引號)。

輸入樣例

1111000[bk][bk]2[bk]10

1111000[bk][bk]2[bk]16

2102101[bk][bk]3[bk]10

2102101[bk][bk]3[bk]15

[bk][bk]12312[bk][bk]4[bk][bk]2

[bk][bk][bk][bk][bk]1A[bk]15[bk][bk]2

1234567[bk]10[bk]16

[bk][bk][bk]ABCD[bk]16[bk]15

輸出樣例

[bk][bk][bk][bk]120

[bk][bk][bk][bk][bk]78

[bk][bk][bk]1765

[bk][bk][bk][bk]7CA

[bk][bk]ERROR

[bk][bk]11001

[bk]12D687

[bk][bk][bk]D071

說明:樣例中的一個“[bk]”僅表示一個空格,實際的輸入和輸出時就是一個空格。

        (1)編程思路。

        為完成基數為A的整數X轉換為基數為B的整數Y。可以先採用X按權值展開的方式將X轉換為十進位整數Z,再將十進位整數Z按除B取餘的方法轉換為B進位的整數Y。

        (2)源程式。

#include <stdio.h>
int main()
{
    char str[10];
    while (scanf("%s",str)!=EOF)
    {
        int a,b;
        scanf("%d%d",&a,&b);
        long long sum=0;
        int i;
        for (i=0;str[i]!='\0';i++)
        {
            if (str[i]>='0'&& str[i]<='9')
               sum=sum*a+str[i]-'0';
            else
               sum=sum*a+str[i]-'A'+10;
        }
        int len=0;
        int num[30];
        do {
            num[len++]=sum%b;
            sum/=b;
        } while(sum);
        if (len>7)
        {
            printf("  ERROR\n");
        }
        else
        {
            for (i=0;i<7-len;i++)
                printf(" ");
            for (i=len-1;i>=0;i--)
               if (num[i]>9)
                  printf("%c",num[i]-10+'A');
               else
                  printf("%d",num[i]);
            printf("\n");
        }
    }
    return 0;
}

         將上面的源程式提交給http://acm.hdu.edu.cn/showproblem.php?pid=1335 Basically Speaking,可以Accepted。

【例5】數位和統計

問題描述

給出2個b進位正整數s和t,算出s和t間所有整數的數位之和。數位和的意思是一個數各個位置上的和。例如,十進位數1357的數位和是16(=1+3+5+7);十六進位數9A8C的數位和是39(=9+10+8+12)。

輸入

第一行一個整數b表示進位,2<=b<=36,A代表10,B代表11,...,Z代表35,以此類推

第二行兩個b進位正整數s和t,s、t在10進位下小於1000000。

輸出

一個十進位整數表示s和t間所有整數的數位之和

輸入樣例

11

A 1A

輸出樣例

76

        (1)編程思路。

        先將b進位數s和t轉換為十進位整數,再用迴圈對s至t之間所有的整數求每個整數在b進位下的各位數字之和,並將這些求得的和累加起來。

        (2)源程式。

#include <stdio.h>
int digitSum(int n,int b)  // 求10進位整數n對應B進位數的各位數字和
{
    int s=0;
    while (n!=0)
    {
        s+=n%b;
        n/=b;
    }
    return s;
}
int change(char s[],int b)  // 將b進位數轉換為10進位數
{
    int i,num,sum=0;
    for (i=0; s[i]!='\0';i++)
    {
        num=s[i]-'0';
        if (num>9) num-=7;
        sum=sum*b+num;
    }
    return sum;
}
int main()
{
    int b;
    scanf("%d",&b);
    char s[21],t[21];
    scanf("%s %s",s,t);
    int i,x,y;
    x=change(s,b);
    y=change(t,b);
    if (x>y)
    {
        int temp;
        temp=x; x=y; y=temp;
    }
    int sum=0;
    for (i=x; i<=y;i++)
        sum+=digitSum(i,b);
    printf("%d\n",sum);
    return 0;
}

【例6】失戀的小W

問題描述

小W在3月7日這天失戀了,傷心的他開始無比討厭3和7這兩個數字,於是他創造了W計數法。W計數法在十進位的基礎上去掉了所有含有數字3和數字7的數,例如2的下一個數是4,29的下一個數是40。小W想知道在這種計數法下X到Y之間有多少個數。

輸入

一行兩個整數表示X、Y,保證1<=X<=Y<=10^9,保證X和Y中不含數字3和數字7。

輸出

一行一個整數表示X到Y之間有多少個數。

輸入樣例

10 100

輸出樣例

57

        (1)編程思路。

       所謂的W計數法就是八進位數。在W計數法中,有0,1,2,4,5,6,8,9等八個數位,規則同樣逢八進一”,只不過W計數法中的“8”相當於十進位數中的“6”,W計數法中的“9”相當於十進位數中的“7”。若給出一個十進位數,要轉換為W計數法中的數,則十進位的4、5、6應分別轉換成3、4、5,8和9要轉換為6和7。也就是說,將十進位整數轉換成W計數法表示的八進位數時,每位的數字轉換為一個數字,若數字超過了7,則減去2;若數字在4~6之間,則減去1;若數字為0~2,則保持不變。W計數法中不存在3和7。

    按上面的方法將十進位數X寫成W計數法表示的八進位數後,再將這個八進位數轉換成十進位數,就知道W計數法中,X是第幾個數。同樣,將十進位數Y寫成W計數法表示的八進位數後,再將這個八進位數轉換成十進位數,就知道W計數法中,Y是第幾個數。這樣就知道X到Y之間有多少個數了。

        (2)源程式。

#include <stdio.h>
void dec2w(int n,char s[])  // 將10進位整數n轉換為w計數法對應的八進位數,並保存到字元串s中
{
    int i,j,k=0;
    int a[13];
    while (n!=0)
    {
        a[k]=n%10;
        if (a[k]>=7)
            a[k]=a[k]-2;
        else if(a[k]>=3)
            a[k]--;
        n=n/10;
        k++;
    }
    for (i=k-1,j=0;i>=0;i--,j++)
        s[j]=a[i]+'0';
    s[j]='\0';
}
int oct2dec(char s[])  // 將s中保存的8進位數轉換為10進位數並返回
{
    int i,sum=0;
    for (i=0; s[i]!='\0';i++)
    {
        sum=sum*8+s[i]-'0';
    }
    return sum;
}
int main()
{
    int x,y;
    scanf("%d %d",&x,&y);
    char s[13];
    dec2w(x,s);
    x=oct2dec(s);
    dec2w(y,s);
    y=oct2dec(s);
    printf("%d\n",y-x+1);
    return 0;
}

【例7】Base B

問題描述

小紅非常喜歡數學。他喜歡研究數字。他知道如何將非負整數表示為基數為P的數字。比如,他知道71的基數為2的數字表示是1000111,65的基數為5的數字表示是230。但小紅希望創建一種所謂Base B的數字表達方式。在該表達方式中,其每個數字值不僅等於或大於A,還小於A+B。例如,如果A=1,B=5,那麼在Base 5中表示數字65,它肯定是225,不會是230(0超出範圍[1,5])。

225=2*52+2*51+5*50=50+10+5=65

小紅對這種表示法非常感興趣,現在他希望你能為他編寫一個程式,幫助他在Base B中表示一個數字N。

輸入

輸入由多組測試用例組成。每組測試用例占1行,每行有三個整數表示N、A、B(0<=N<=10^9、0<=A<=100、2<=B<=100)。

輸出

對於每組測試用例,輸出N在Base B中的表示方式,各數字之間用空格分隔。

輸入樣例

65 1 5

15 0 2

輸出樣例

Case 1: 2 2 5

Case 2: 1 1 1 1

        (1)編程思路。

        先將輸入的十進位整數N轉換為b進位數。由於Base B中要求每位上的數不能小於a。因此,需要進行校正。校正方法為:將轉換後得到的b進位數從低位到高位進行處理。如果當前位上數小於a,則從高一位借1,然後當前位加b。

        (2)源程式。

#include <stdio.h>
int main()
{
    int n,a,b,iCase=0;
    while (scanf("%d%d%d",&n,&a,&b)!=EOF)
    {
        int cnt=0;
        int digit[32];
        while (n)              // 將n轉換為b進位保存在數組digit中
        {
            digit[cnt++]=n%b;
            n/=b;
        }
        int i;
        for (i=0;i<cnt-1;i++)  // 對小於a的數字進行校正
        {
            while (digit[i]<a)
            {
                digit[i]+=b;
                digit[i+1]--;
            }
        }
        printf("Case %d:",++iCase);
        for (i=cnt-1;i>=0;i--)
        {
            printf(" %d",digit[i]);
        }
        printf("\n");
    }
    return 0;
}

        將上面的源程式提交給http://acm.hdu.edu.cn/showproblem.php?pid=2864 Base B,可以Accepted。

【例8】約數的和

問題描述

給定一個十進位整數n,計算n的所有約數在m進位中各位數字的平方和。

例如,給定整數n=10,它的約數有1, 2, 5, 10,表示為2進位數為1, 10, 101, 1010。在2進位中,這些約數的各位數字的平方和為

1^2+ (1^2 + 0^2) + (1^2 + 0^2 + 1^2) + .... = 6 = 110(表示為2進位數)。

輸入

輸入包括多個測試用例,每個測試用例是一行,包括兩個十進位整數n和m(1≤n≤109,2≤m≤16)。

輸出

所有約數在m進位中各位數字的平方和。

輸入樣例

10 2

30 5

輸出樣例

110

112

        (1)編程思路。

         先用迴圈求出n的所有約數並保存到數組a中。再求每個約數在m進位下的各位數字的平方和,並將求得的平方和累加起來。最後將求得的和值(十進位數)轉換為m進位數輸出。

        (2)源程式。

#include <stdio.h>
#include <math.h>
int main()
{
    int n, m;
    while (scanf("%d%d",&n,&m)!=EOF)
    {
        int i,temp = sqrt(n);
        int cnt = 0;
        int a[10005];
        for (i = 1;i<=temp;i++)   // 求出n的所有因數並保存到數組a中
        {
            if (n%i == 0)
            {
                a[cnt++] = i;
                if (i!= n/i) a[cnt++] = n / i;
            }
        }
        int sum = 0;
        for (i = 0;i < cnt;i++) // 求出n的所有因數在m進位下的各位數字的平方和
        {
            temp = a[i];
            while (temp)
            {
                sum += (temp%m)*(temp%m);
                temp /= m;
            }
        }
        char ans[32];
        cnt = 0;
        while (sum)            // 將求得的和值(十進位數)轉換為m進位數輸出
        {
            temp = sum%m;
            if (temp < 10)
                ans[cnt++] = temp + '0';
            else
                ans[cnt++] = temp - 10 + 'A';
            sum /= m;
        }
        for (i = cnt - 1;i >= 0;i--)
            printf("%c",ans[i]);
        printf("\n");
    }
    return 0;
}

      將上面的源程式提交給 http://acm.hdu.edu.cn/showproblem.php?pid=4432  Sum of divisors,可以Accepted。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 要成為一名優秀的 Web 開發人員,最快的方法就是練習。一個很好的練習方法是儘可能多地構建初學者項目。那是因為每個項目都會提出一個獨特的問題和解決方案,因此您解決的項目越多,您獲得的知識就越多。將您完成的每個項目都視為您獲得的獎牌。您擁有的獎牌越多,您就越能準備好應對下一個難度更大的項目。 為了幫助 ...
  • 個人名片: 對人間的熱愛與歌頌,可抵歲月冗長:sun_with_face: Github👨🏻‍💻:念舒_C.ying CSDN主頁✏️:念舒_C.ying 個人博客:earth_asia: :念舒_C.ying 預覽圖 直接進入我的網站吧 >> Z_C戀愛日記 下載源碼 鏈接:https:// ...
  • 在vue2中,提供了provide和inject配置,可以讓開發者在高層組件中註入數據,然後在後代組件中使用 除了相容vue2的配置式註入,vue3在composition api 中添加了provide和inject方法,可以在setup函數中註入 和使用數據 基本使用 provide('key' ...
  • 自定義 封裝單列模式! global state 由於vue3的響應式系統本身可以脫離組件而存在,因此可以充分利用這一點,輕鬆製造多個全局響應式數據, 並且通過和vuex一樣 通過某個模塊指定方法修改數據,不能直接修改數據,並且讓數據成為全局響應式 並且在代碼體積上絕對的輕量級!比市面上的任何第三方 ...
  • 一.小結 1.程式模塊化和可重用性是軟體工程的中心目標之一。java提供了很多有助於完成這一目標的有效結構。方法就是一個這樣的結構。 2.方法指定方法的修飾符,返回值類型,方法名和參數。比如靜態修飾符static。 3.方法可以返回一個值。返回值類型returnValueType是方法要返回的值數據 ...
  • 伺服器端渲染技術01 為什麼需要jsp? 在之前的開發過程中,我們可以發現servlet做界面非常不方便: 引出jsp技術=> jsp=html+java代碼+標簽+javascript+css 1.JSP基本介紹 JSP全稱是Java Server Pages,Java的伺服器頁面,就是伺服器端渲 ...
  • 目錄 一.OpenGL 褐色 1.IOS Object-C 版本 1.Windows OpenGL ES 版本 2.Windows OpenGL 版本 二.OpenGL 褐色 GLSL Shader 三.猜你喜歡 零基礎 OpenGL ES 學習路線推薦 : OpenGL ES 學習目錄 >> Op ...
  • 多線程理解 繼承Thread類 子類繼承Thread類具備多線程能力 啟動線程:子類對象.start() 不建議使用:避免oop單繼承局限性 實現Runnable介面 實現介面Runnable具有多線程能力 啟動線程:傳入目標對象+Thread對象.start() 推薦使用:避免單繼承局限性,可能一 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...