14:HAL---CRC校驗

103系列只有一個CRC

前言:

????????CRC(Cyclic Redundancy Check),即循環冗余校驗,是一種根據網絡數據包或電腦文件等數據產生簡短固定位數校核碼的快速算法,主要用來檢測或校核數據傳輸或者保存后可能出現的錯誤。CRC校驗的工作原理主要基于以下步驟:

  1. 選定一個標準除數(一個K位二進制數據串)。
  2. 在要發送的數據(m位)后面加上K-1位0,然后將這個新數(M+K-1位)以模2除法的方式除以上面這個標準除數,所得到的余數(余數必須比除數少且只少一位,不夠就補0)也就是該數據的CRC校驗碼。
  3. 將這個校驗碼附在原m位數據后面,構成新的M+K-1位數據,發送給接收端。
  4. 接收端將接收到的數據除以標準除數,如果余數為0則認為數據正確。

????????CRC校驗被廣泛應用于各種通信協議中,如以太網、USB、串口通信協議等,以及存儲介質中,如硬盤、光盤等。在數據傳輸和存儲過程中,由于各種原因(如磁場干擾、光盤劃傷等),數據可能會發生錯誤,CRC校驗可以有效地檢測并糾正這些錯誤。

????????此外,CRC校驗還常用于文件傳輸、數據庫和防篡改檢測中。在文件傳輸過程中,發送方會計算文件的CRC校驗碼,并將其與文件一同發送給接收方。接收方在接收到文件后,重新計算CRC校驗碼并與接收到的校驗碼進行比較,以判斷文件是否傳輸正確。在數據庫中,每當數據進行插入、更新或刪除操作時,會先計算CRC校驗碼,并將其與數據一同存儲在數據庫中。在讀取數據時,再次計算CRC校驗碼并與存儲的校驗碼進行比較,以檢測數據是否被篡改。在數據加密中,為了防止被黑客篡改,常常會使用CRC校驗技術。

????????總之,CRC校驗是一種非常有效的數據錯誤檢測和糾正技術,在各種數據傳輸和存儲場景中都有廣泛的應用。

一:CRC

CRC種類:CRC8,CRC16,CRC32

CRC8:校驗結果為1個字節。

CRC16:校驗結果為5個字節。

CRC32:校驗結果為4個字節。

在我們整個103系列中只有CRC32的硬件校驗。

初始值和多項式:2種通信在確定CRC校驗種類后,然后就是確定多項式和初值的一致。

對于我們整個103系列的來說這兩個都是固定的值。

多項式:

初值:

二:HAL的配置

?

三:代碼

A:硬件CRC單次校驗計算

#include "stm32f1xx_hal.h"
#include "rcc.h"
#include "led.h"
#include "delay.h"
#include "UART.h"
#include <stdarg.h>
#include "stdio.h"
#include "CRC.h"uint32_t verify[4]={0x01020304,0x05060708,0x090A0B0C,0x0D0E0F00};int main(void)
{HAL_Init();                         /* 初始化HAL庫 */sys_stm32_clock_init(RCC_PLL_MUL9); /* 設置時鐘, 72Mhz */delay_init(72);                     /* 延時初始化 */LED_Init();                        /* LED初始化 */Uart_Init(115200);CRC_Init();uint32_t inspection_data=HAL_CRC_Calculate(&CRC_Handle,verify,4);//因為采用的是硬件CRC32的校驗,返回的為4個字節。所以必須采用uint32_t //uint32_t 為4個字節。如果使用其他的那么返回值錯誤,不是4個字節。printf("%x\r\n",inspection_data);while (1){}   
}#include "stm32f1xx_hal.h"CRC_HandleTypeDef CRC_Handle;void CRC_Init(void)
{CRC_Handle.Instance=CRC;HAL_CRC_Init(&CRC_Handle);
}void HAL_CRC_MspInit(CRC_HandleTypeDef *hcrc)
{__HAL_RCC_CRC_CLK_ENABLE();}

HAL_CRC_Calculate()函數使用注意:

第二個參數:是按字節傳輸的的(一次4個字節),所以數據從傳輸檢驗必須為4字節的整數倍。

uint32_t pBuffer[]:這是一個指向要計算CRC的數據的指針。這個數組包含了要進行CRC計算的數據。由于STM32的CRC算法通常是基于32位數據的,所以這里的數組元素類型通常為uint32_t

我們采用uint32_t?類型的變量占用?4 個字節

第三個參數

  1. uint32_t BufferLength:這個參數指定了pBuffer數組中的元素數量,也就是要計算CRC的數據長度。這個值通常以32位為單位,表示有多少個32位數據需要進行CRC計算。

B:硬件CRC連續計算

????????

????????當我們的數據量太大的時候,一次性的計算對于我們來說有點困難,或者內存不夠。我們采用連續CRC校驗的方式(一次校驗一個字)。

#include "stm32f1xx_hal.h"
#include "rcc.h"
#include "led.h"
#include "delay.h"
#include "UART.h"
#include <stdarg.h>
#include "stdio.h"
#include "CRC.h"uint32_t verify[5]={0x01020304,0x05060708,0x090A0B0C,0x0D0E0F00,0x01020304};int main(void)
{HAL_Init();                         /* 初始化HAL庫 */sys_stm32_clock_init(RCC_PLL_MUL9); /* 設置時鐘, 72Mhz */delay_init(72);                     /* 延時初始化 */LED_Init();                        /* LED初始化 */Uart_Init(115200);CRC_Init();uint32_t inspection_data=HAL_CRC_Calculate(&CRC_Handle,verify,5);//因為采用的是硬件CRC32的校驗,返回的為4個字節。所以必須采用uint32_t //uint32_t 為4個字節。如果使用其他的那么返回值錯誤,不是4個字節。printf("單次校驗結果=%x\r\n",inspection_data);HAL_CRC_Calculate(&CRC_Handle,&verify[0],1);HAL_CRC_Accumulate(&CRC_Handle,&verify[1],1);HAL_CRC_Accumulate(&CRC_Handle,&verify[2],1);HAL_CRC_Accumulate(&CRC_Handle,&verify[3],1);uint32_t Continuous_check=HAL_CRC_Accumulate(&CRC_Handle,&verify[4],1);printf("連續校驗結果=%x\r\n",Continuous_check);while (1){}   
}#include "stm32f1xx_hal.h"CRC_HandleTypeDef CRC_Handle;void CRC_Init(void)
{CRC_Handle.Instance=CRC;HAL_CRC_Init(&CRC_Handle);
}void HAL_CRC_MspInit(CRC_HandleTypeDef *hcrc)
{__HAL_RCC_CRC_CLK_ENABLE();}

C:軟件CRC校驗計算

????????軟件的CRC校驗相對于我們硬件CRC的檢驗,來說非常靈活,初始值和多項式我們可以自己調節。

#include "stm32f1xx_hal.h"
#include "rcc.h"
#include "led.h"
#include "delay.h"
#include "UART.h"
#include <stdarg.h>
#include "stdio.h"
#include "CRC.h"uint32_t verify[5]={0x01020304,0x05060708,0x090A0B0C,0x0D0E0F00};
uint8_t software_verify[16]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
uint32_t res;int main(void)
{HAL_Init();                         /* 初始化HAL庫 */sys_stm32_clock_init(RCC_PLL_MUL9); /* 設置時鐘, 72Mhz */delay_init(72);                     /* 延時初始化 */LED_Init();                        /* LED初始化 */Uart_Init(115200);CRC_Init();uint32_t inspection_data=HAL_CRC_Calculate(&CRC_Handle,verify,4);//因為采用的是硬件CRC32的校驗,返回的為4個字節。所以必須采用uint32_t //uint32_t 為4個字節。如果使用其他的那么返回值錯誤,不是4個字節。printf("硬件單次校驗結果=%x\r\n",inspection_data);HAL_CRC_Calculate(&CRC_Handle,&verify[0],1);HAL_CRC_Accumulate(&CRC_Handle,&verify[1],1);HAL_CRC_Accumulate(&CRC_Handle,&verify[2],1);//HAL_CRC_Accumulate(&CRC_Handle,&verify[3],1);uint32_t Continuous_check=HAL_CRC_Accumulate(&CRC_Handle,&verify[3],1);printf("硬件連續校驗結果=%x\r\n",Continuous_check);uint32_t software_data= CRC32(software_verify,16,0XFFFFFFFF);printf("軟件單次校驗結果=%x\r\n",software_data);res=CRC32(&software_verify[0],4,0XFFFFFFFF);res=CRC32(&software_verify[4],4,res);res=CRC32(&software_verify[8],4,res);printf("軟件連續校驗結果=%x\r\n",CRC32(&software_verify[12],4,res));while (1){} }#include "stm32f1xx_hal.h"CRC_HandleTypeDef CRC_Handle;void CRC_Init(void)
{CRC_Handle.Instance=CRC;HAL_CRC_Init(&CRC_Handle);
}void HAL_CRC_MspInit(CRC_HandleTypeDef *hcrc)
{__HAL_RCC_CRC_CLK_ENABLE();}/*** @brief  軟件CRC32校驗計算*         * @param  data:校驗的數據我們一次校驗一個字節* @param  len:  檢驗數據的長度 * @param  inti:  檢驗的初值* @retval 返回4個字節的校驗數據*/
uint32_t CRC32(uint8_t *data,uint16_t len,uint32_t init)
{//^=異或不同為1uint32_t poly=0x04C11DB7; //多項式	while(len--){	//data<<24:因為CRC32返回去的校驗值為4個字節;我們校驗的是一個字節;//所以把他左移3個字節到最高位。3*8=24也就是左移24位。init=init^(*data<<24);for(uint8_t i=0;i<8;i++){if((init&0x80000000)){init=(init<<1)^poly;		}else{init=(init<<1);}}data++;}return init;
}

D:軟件CRC數據反轉

#include "stm32f1xx_hal.h"
#include "rcc.h"
#include "led.h"
#include "delay.h"
#include "UART.h"
#include <stdarg.h>
#include "stdio.h"
#include "CRC.h"uint32_t verify[5]={0x01020304,0x05060708,0x090A0B0C,0x0D0E0F00};
uint8_t software_verify[20]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
uint32_t res;int main(void)
{HAL_Init();                         /* 初始化HAL庫 */sys_stm32_clock_init(RCC_PLL_MUL9); /* 設置時鐘, 72Mhz */delay_init(72);                     /* 延時初始化 */LED_Init();                        /* LED初始化 */Uart_Init(115200);CRC_Init();uint32_t inspection_data=HAL_CRC_Calculate(&CRC_Handle,verify,4);//因為采用的是硬件CRC32的校驗,返回的為4個字節。所以必須采用uint32_t //uint32_t 為4個字節。如果使用其他的那么返回值錯誤,不是4個字節。printf("硬件單次校驗結果=%x\r\n",inspection_data);HAL_CRC_Calculate(&CRC_Handle,&verify[0],1);HAL_CRC_Accumulate(&CRC_Handle,&verify[1],1);HAL_CRC_Accumulate(&CRC_Handle,&verify[2],1);//HAL_CRC_Accumulate(&CRC_Handle,&verify[3],1);uint32_t Continuous_check=HAL_CRC_Accumulate(&CRC_Handle,&verify[3],1);printf("硬件連續校驗結果=%x\r\n",Continuous_check);uint32_t software_data= CRC32(software_verify,16,0XFFFFFFFF);printf("軟件單次校驗結果=%x\r\n",software_data);//軟件的輸入反轉+輸出反轉的時候不能使用連續的校驗;//因為在連續的過程種會不只一次的反轉輸出的結果(一直調用CRC32函數)//只有輸入反轉的時候可以使用//	res=CRC32(&software_verify[0],4,0XFFFFFFFF);
//	res=CRC32(&software_verify[4],4,res);
//	res=CRC32(&software_verify[8],4,res);
//	//res=CRC32(&software_verify[12],4,res);
//	printf("軟件連續校驗結果=%x\r\n",CRC32(&software_verify[12],4,res));while (1){} }
#include "stm32f1xx_hal.h"uint8_t Inveruint8(uint8_t data);
uint32_t Inveruint32(uint32_t data);CRC_HandleTypeDef CRC_Handle;void CRC_Init(void)
{CRC_Handle.Instance=CRC;HAL_CRC_Init(&CRC_Handle);
}void HAL_CRC_MspInit(CRC_HandleTypeDef *hcrc)
{__HAL_RCC_CRC_CLK_ENABLE();}/*** @brief  軟件CRC32校驗計算*         * @param  data:校驗的數據我們一次校驗一個字節* @param  len:  檢驗數據的長度 * @param  inti:  檢驗的初值* @retval 返回4個字節的校驗數據*/
uint32_t CRC32(uint8_t *data,uint16_t len,uint32_t init)
{//^=異或不同為1uint32_t poly=0x04C11DB7; //多項式	while(len--){	//data<<24:因為CRC32返回去的校驗值為4個字節;我們校驗的是一個字節;//所以把他左移3個字節到最高位。3*8=24也就是左移24位。init=init^(Inveruint8(*data)<<24);   //輸入反轉for(uint8_t i=0;i<8;i++){if((init&0x80000000)){init=(init<<1)^poly;		}else{init=(init<<1);}}data++;}return Inveruint32(init);    //輸出反轉
}//數據反轉
uint8_t Inveruint8(uint8_t data)
{uint8_t i;uint8_t temp;temp=0;for(i=0;i<8;i++){if(data&(1<<i)){temp|=1<<(7-i);}}return temp;
}//數據反轉
uint32_t Inveruint32(uint32_t data)
{uint8_t i;uint32_t temp;temp=0;for(i=0;i<32;i++){if(data&(1<<i)){temp|=1<<(31-i);}}return temp;
}

E:軟件的CRC16和CRC8

CRC16

#include "stm32f1xx_hal.h"
#include "rcc.h"
#include "led.h"
#include "delay.h"
#include "UART.h"
#include <stdarg.h>
#include "stdio.h"
#include "CRC.h"uint32_t verify[5]={0x01020304,0x05060708,0x090A0B0C,0x0D0E0F00};
uint8_t software_verify[20]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
uint32_t res;int main(void)
{HAL_Init();                         /* 初始化HAL庫 */sys_stm32_clock_init(RCC_PLL_MUL9); /* 設置時鐘, 72Mhz */delay_init(72);                     /* 延時初始化 */LED_Init();                        /* LED初始化 */Uart_Init(115200);CRC_Init();uint32_t inspection_data=HAL_CRC_Calculate(&CRC_Handle,verify,4);//因為采用的是硬件CRC32的校驗,返回的為4個字節。所以必須采用uint32_t //uint32_t 為4個字節。如果使用其他的那么返回值錯誤,不是4個字節。printf("硬件單次校驗結果=%x\r\n",inspection_data);HAL_CRC_Calculate(&CRC_Handle,&verify[0],1);HAL_CRC_Accumulate(&CRC_Handle,&verify[1],1);HAL_CRC_Accumulate(&CRC_Handle,&verify[2],1);//HAL_CRC_Accumulate(&CRC_Handle,&verify[3],1);uint32_t Continuous_check=HAL_CRC_Accumulate(&CRC_Handle,&verify[3],1);printf("硬件連續校驗結果=%x\r\n",Continuous_check);uint16_t software_data= CRC16(software_verify,16,0XFFFF);printf("軟件單次校驗結果=%x\r\n",software_data);//軟件的輸入反轉+輸出反轉的時候不能使用連續的校驗;//因為在連續的過程種會不只一次的反轉輸出的結果(一直調用CRC32函數)//只有輸入反轉的時候可以使用//	res=CRC32(&software_verify[0],4,0XFFFFFFFF);
//	res=CRC32(&software_verify[4],4,res);
//	res=CRC32(&software_verify[8],4,res);
//	//res=CRC32(&software_verify[12],4,res);
//	printf("軟件連續校驗結果=%x\r\n",CRC32(&software_verify[12],4,res));while (1){} }#include "stm32f1xx_hal.h"uint8_t Inveruint8(uint8_t data);
uint32_t Inveruint32(uint32_t data);
uint16_t Inveruint16(uint16_t data);
CRC_HandleTypeDef CRC_Handle;void CRC_Init(void)
{CRC_Handle.Instance=CRC;HAL_CRC_Init(&CRC_Handle);
}void HAL_CRC_MspInit(CRC_HandleTypeDef *hcrc)
{__HAL_RCC_CRC_CLK_ENABLE();}/*** @brief  軟件CRC32校驗計算*         * @param  data:校驗的數據我們一次校驗一個字節* @param  len:  檢驗數據的長度 * @param  inti:  檢驗的初值* @retval 返回4個字節的校驗數據*/
uint32_t CRC32(uint8_t *data,uint16_t len,uint32_t init)
{//^=異或不同為1uint32_t poly=0x04C11DB7; //多項式	while(len--){	//data<<24:因為CRC32返回去的校驗值為4個字節;我們校驗的是一個字節;//所以把他左移3個字節到最高位。3*8=24也就是左移24位。init=init^(Inveruint8(*data)<<24);   //輸入反轉for(uint8_t i=0;i<8;i++){if((init&0x80000000)){init=(init<<1)^poly;		}else{init=(init<<1);}}data++;}return Inveruint32(init);    //輸出反轉
}/*** @brief  軟件CRC16校驗計算*         * @param  data:校驗的數據我們一次校驗一個字節* @param  len:  檢驗數據的長度 * @param  inti:  檢驗的初值* @retval 返回4個字節的校驗數據*/
uint16_t CRC16(uint8_t *data,uint16_t len,uint16_t init)
{//^=異或不同為1uint32_t poly=0x8005; //多項式	while(len--){	init=init^(Inveruint8(*data)<<8);   //輸入反轉for(uint8_t i=0;i<8;i++){if((init&0x8000)){init=(init<<1)^poly;		}else{init=(init<<1);}}data++;}return Inveruint16(init);    //輸出反轉
}//數據反轉---輸入
uint8_t Inveruint8(uint8_t data)
{uint8_t i;uint8_t temp;temp=0;for(i=0;i<8;i++){if(data&(1<<i)){temp|=1<<(7-i);}}return temp;
}//數據反轉----輸出
uint32_t Inveruint32(uint32_t data)
{uint8_t i;uint32_t temp;temp=0;for(i=0;i<32;i++){if(data&(1<<i)){temp|=1<<(31-i);}}return temp;
}//數據反轉
uint16_t Inveruint16(uint16_t data)
{uint8_t i;uint16_t temp;temp=0;for(i=0;i<16;i++){if(data&(1<<i)){temp|=1<<(15-i);}}return temp;
}

CRC8

/*** @brief  軟件CRC8校驗計算*         * @param  data:校驗的數據我們一次校驗一個字節* @param  len:  檢驗數據的長度 * @param  inti:  檢驗的初值* @retval 返回4個字節的校驗數據*/
uint8_t CRC8(uint8_t *data,uint16_t len,uint8_t init)
{//^=異或不同為1uint32_t poly=0x07; //多項式	while(len--){	init=init^(*data<<8);   for(uint8_t i=0;i<8;i++){if((init&0x80)){init=(init<<1)^poly;		}else{init=(init<<1);}}data++;}uint8_t software_data= CRC8(software_verify,16,0XFF);printf("軟件單次校驗結果=%x\r\n",software_data);

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/11002.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/11002.shtml
英文地址,請注明出處:http://en.pswp.cn/web/11002.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

QX---mini51單片機學習---(8)8*8點陣屏

目錄 1LED點陣屏簡紹 2 8*8點陣屏電路圖74 3 74HC595芯片 4實踐編程 1LED點陣屏簡紹 2 8*8點陣屏電路圖74 怎么點亮&#xff0c;正極給高負極給低 不能同時靜態顯示&#xff0c;跟數碼管動態顯示一樣&#xff0c;反復橫跳&#xff0c;利用視覺效果 3 74HC595芯片 …

斐波那契數

509. 斐波那契數 斐波那契數 &#xff08;通常用 F(n) 表示&#xff09;形成的序列稱為 斐波那契數列 。該數列由 0 和 1 開始&#xff0c;后面的每一項數字都是前面兩項數字的和。也就是&#xff1a; F(0) 0&#xff0c;F(1) 1 F(n) F(n - 1) F(n - 2)&#xff0c;其中 …

第四屆上海理工大學程序設計全國挑戰賽---昨日方舟

知識點&#xff1a;模擬 題目描述 《昨日方舟》是一款塔防類游戲。在游戲中&#xff0c;我們要通過部署角色來抵御怪物的入侵。在這款游戲中&#xff0c;有一名角色名字為 “今”&#xff0c;他的能力為能夠在地圖上部署小蛇&#xff0c;小蛇在某些條件下可以與其他小蛇合體…

關于 IIS 開啟匿名訪問網站仍要賬號密碼登錄網站的解決方法

歡迎關注公總號【云邊小網安】 問題提出&#xff1a;發現雖然勾選了允許匿名訪問網站&#xff0c;但在訪問某一網站的時候仍然需要登錄賬號密碼 解決方法一&#xff1a;登錄管理員賬號密碼解決方法二&#xff1a;添加訪問網站文件夾的用戶 訪問某一網站本質上來講&#xff0…

C++入門必讀-Qt的安裝與配置

QT簡介 Qt是一個跨平臺的C圖形用戶界面應用程序框架。它為應用程序開發者提供建立圖形界面所需的所有功能。它是完全面向對象的&#xff0c;很容易擴展&#xff0c;并且允許真正的組件編程。 QT下載 訪問下載網站: Index of /archive/qt 安裝編譯器 QT安裝 建議安裝之前將網絡斷…

1064 朋友數

solution 給出n個整數&#xff0c;統計可能的位數和&#xff0c;并按升序輸出&#xff08;考慮用set實現&#xff09; #include<iostream> #include<set> using namespace std; int main(){set<int> st;int n, x, sum;scanf("%d", &n);while…

前端Vue架構

1 理解&#xff1a; 創建視圖的函數&#xff08;render&#xff09;和數據之間的關聯&#xff1b; 當數據發生變化的時候&#xff0c;希望render重新執行&#xff1b; 監聽數據的讀取和修改&#xff1b; defineProperty&#xff1a;監聽范圍比較窄&#xff0c;只能通過屬性描…

Docker 直接運行一個 Alpine 鏡像

由于鏡像很小&#xff0c;下載時間往往很短&#xff0c;讀者可以直接使用 docker run 指令直接運行一個 Alpine 容器&#xff0c;并指定運行的 Linux 指令&#xff0c;例如&#xff1a; PS C:\Users\yhu> docker run alpine echo 123 Unable to find image alpine:latest lo…

Commit failed (details follow):is out of date

Commit failed (details follow):is out of date 關于SVN提交時報out-of-date錯誤的解決方法 提交項目文件時&#xff0c;報如下的信息&#xff1a; Item is out-of-date svn: Commit failed (details follow): svn: Item ‘/xxx/xxx/xxx/xxx/xxx/xxx’ is out of date 原因&…

手寫Spring5【筆記】

Spring5【筆記】 前言前言推薦Spring5【筆記】1介紹2手寫 最后 前言 這是陳舊已久的草稿2022-12-01 23:32:59 這個是刷B站的時候&#xff0c;看到一個手寫Spring的課程。 最后我自己好像運行不了&#xff0c;就沒寫。 現在2024-5-12 22:22:46&#xff0c;發布到[筆記]專欄中…

隊列(詳解)

一.隊列的概念 隊列&#xff08;Queue&#xff09;是一種常見的數據結構&#xff0c;它按照先進先出的原則管理數據。這意味著最先進入隊列的元素將被最先移出隊列&#xff0c;類似于現實生活中排隊的場景。 在隊列中&#xff0c;數據項被添加到隊列的一端&#xff0c;稱為隊尾…

cmu15445 2023fall project3 詳細過程(下)QUERY EXECUTION

QUERY EXECUTION task3/task4 Task #3 - HashJoin Executor and Optimization1、HashJoin1.1 思路1.2 代碼 2 NestedLoopJoin優化為HashJoin2.1 思路2.2 代碼 Task #4 Sort Limit Executors Top-N Optimization Window Functions1、Sort1.1 思路1.2 代碼 2、Limit Executors2…

數據可視化第五天(讀取文件獲得男生女生身高信息,并且可視化在一個圖像)

文件 需要學生文件的可以私信我 過程 利用numpy的loadtxt文件讀取學號&#xff0c;性別&#xff0c;和身高。 import numpy as np import matplotlib.pyplot as pltfilename/Users/oommnn/Desktop/python學習/數據分析/網課資料/第04天/student-data.txtuser_infonp.dtype(…

文獻閱讀——LPPLS(2)

A study on the bursting point of Bitcoin based on the BSADF and LPPLS methods 文獻來源[2] Yao, Can-Zhong, and Hong-Yu Li. “A study on the bursting point of Bitcoin based on the BSADF and LPPLS methods.” The North American Journal of Economics and Financ…

貓頭虎分享已解決Bug || **Vue.js腳手架安裝失敗** Error: unable to fetch template`

貓頭虎分享已解決Bug &#x1f42f; || Vue.js腳手架安裝失敗 &#x1f6ab;Error: unable to fetch template 博主貓頭虎的技術世界 &#x1f31f; 歡迎來到貓頭虎的博客 — 探索技術的無限可能&#xff01; 專欄鏈接&#xff1a; &#x1f517; 精選專欄&#xff1a; 《面試題…

CodeTop 高頻筆試題總結(持續更新)

&#x1f3c6; 頻率從高到低排序 &#x1f468;?&#x1f3eb; 參考的頻率數據&#xff1a;CodeTop &#x1f468;?&#x1f3eb; 力扣hot100 無重復字符的最長子串 雙指針 滑動窗口 哈希&#x1f468;?&#x1f3eb; 力扣hot100 反轉鏈表 指針 遞歸 一題多解&#x1f468;?…

7. path路徑繪制:使用path繪制曲線

曲線在SVG中通常是通過貝塞爾曲線命令來繪制的&#xff0c;包括二次貝塞爾曲線&#xff08;Q&#xff09;和三次貝塞爾曲線&#xff08;C&#xff09;。這些命令允許我們創建平滑的曲線路徑。 貝塞爾曲線的原理 貝塞爾曲線的基本原理是通過控制點和錨點來定義一條曲線的形狀。…

命名規范總結Java

小駝峰命名 主要用于變量和方法的命名&#xff0c;當標識符是一個單詞時首字母小寫&#xff0c;當標識符為多個單詞時第一個單詞首字母小寫&#xff0c;其他單詞首字母大寫 大駝峰命名 主要用于類(Class)名等。標識符各個單詞首字母大寫。 全部大寫命名 常量名 全部小寫命…

持續總結中!2024年面試必問 100 道 Java基礎面試題(四十一)

上一篇地址&#xff1a;持續總結中&#xff01;2024年面試必問 100 道 Java基礎面試題&#xff08;四十&#xff09;-CSDN博客 八十一、Java內存模型是什么&#xff1f; Java內存模型&#xff08;Java Memory Model, JMM&#xff09;是Java虛擬機&#xff08;JVM&#xff09;…

海豚知道知識付費平臺,大V都在用,新手也能做,網絡營銷是什么?如何向銷售轉化?

我國的市場營銷已經全面步入互聯網時代&#xff0c;教育行業也逐漸網絡化&#xff0c;通過互聯網發家壯大的機構比比皆是&#xff0c;然而仍舊有很多中小型教育培訓機構&#xff0c;沒有從事網絡營銷推廣&#xff0c;或者從事了效果非常不理想。網絡營銷是什么&#xff0c;如何…