結構體和字元流的相互轉換

2021-09-24 01:19:12 字數 2166 閱讀 7998

參考:

工作中遇到了乙個問題,在針對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...