參考:
工作中遇到了乙個問題,在針對postgres原始碼和kpu對接的程式編寫時,發現kpu的kernel函式的引數只能新增基礎資料型別,我們無法將原始碼中的結構體發給kernel函式,所以我們要將結構體轉換成int或者char等基礎資料型別的陣列來處理。
demo程式
// c語言中結構體與字元陣列之間的相互轉換.cpp : 此檔案包含 "main" 函式。程式執行將在此處開始並結束。
//#include "pch.h"
#include #include #include #include typedef struct score
void print()
*/}score;
/*#pragma pack(push)//儲存對齊狀態
#pragma pack(1)
typedef struct strcchange
stru_change;
#pragma pack(pop)
*///如果在未加位元組對齊的情況下,那麼需要位元組對齊,
//那麼直接將結構體取位址後複製到另乙個陣列中,實際上所需占用的記憶體大小是8個byte。
typedef struct strcchange
stru_change;
int main()
// 執行程式: ctrl + f5 或除錯 >「開始執行(不除錯)」選單
// 除錯程式: f5 或除錯 >「開始除錯」選單
// 1. 使用解決方案資源管理器視窗新增/管理檔案
// 2. 使用團隊資源管理器視窗連線到源**管理
// 3. 使用輸出視窗檢視生成輸出和其他訊息
// 4. 使用錯誤列表視窗檢視錯誤
// 5. 轉到「專案」>「新增新項」以建立新的**檔案,或轉到「專案」>「新增現有項」以將現有**檔案新增到專案
// 6. 將來,若要再次開啟此專案,請轉到「檔案」>「開啟」>「專案」並選擇 .sln 檔案
轉換前資料結構內容: a=a,b=5,c=12.500000,d=hello
字元陣列獲取資料結構:a=a,b=5,c=12.500000,d=hello
我想到了另乙個問題,如果期間把buf指標轉換成其他資料型別的指標進行操作會有什麼結果,我們知道,如果是普通的同型別指標互相賦值,那麼不管是那個指標都會改變指標位址儲存的值,不同型別的實際上也是一樣的,實驗如下。加入方法fun。
void fun(char *buf) //傳入的是指標 即使型別轉換 還是會變化
int main()
12
48轉換前資料結構內容: a=a,b=5,c=12.500000,d=hello
temp獲取資料結構:a=a,b=5,c=12.500000,d=hello
字元陣列獲取資料結構:a=a,b=5,c=12.500000,d=hello
hello
發現temp和最後的答案都變了,驗證了假設。
結構體中巢狀結構體
// 結構體轉換.cpp : 此檔案包含 "main" 函式。程式執行將在此處開始並結束。
///*
工作需要將postgres原始碼中的結構體
*/#include "pch.h"
#include #include #include #include typedef struct score
/* void print()
*/}score;
//如果在未加位元組對齊的情況下,那麼需要位元組對齊,
//那麼直接將結構體取位址後複製到另乙個陣列中,實際上所需占用的記憶體大小是8個byte。
typedef struct stru_change
stru_change;
int main()
28
轉換前資料結構內容:score:math=1,score:chinese=2,score:english=3,a=a,b=5,c=12.500000,d=hello
28從字元陣列中獲取資料結構:score:math=1,score:chinese=2,score:english=3,a=a,b=5,c=12.500000,d=hello
字元流位元組流相互轉換
1 位元組輸出流轉換成字元輸出流 寫到硬碟 建立位元組輸出流 fileoutputstream fis new fileoutputstream e document aaa.txt 位元組輸出流轉換成字元輸出流 outputstreamwriter osw new outputstreamwrit...
數字和字元的相互轉換
今天發現了乙個很好用的函式 sprintf 用來把數字轉換為字元的形式。其用法類似於我們的 printf d inta 什麼類似,就是完全一樣嘛 用法示例如下 看這裡其函式原型是 include stdio.h intsprintf char restrict s,const char restri...
數字和字元的相互轉換
今天發現了乙個很好用的函式 sprintf 用來把數字轉換為字元的形式。其用法類似於我們的 printf d inta 什麼類似,就是完全一樣嘛 用法示例如下 看這裡其函式原型是 include stdio.h intsprintf char restrict s,const char restri...