[爆卦]Fopen string是什麼?優點缺點精華區懶人包

為什麼這篇Fopen string鄉民發文收入到精華區:因為在Fopen string這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者loveme00835 (高髮箍)看板C_and_CPP標題Re: [問題] fopen() &...


※ 引述《changyuheng (張昱珩)》之銘言:
: ※ 引述《KSmart (經濟不景氣,好景不常在)》之銘言:
: : 1.fopen的問題
: : 如果我新增的檔案名稱是一個變數(可能是日期或是身分證字號),
: : 因為會隨著每一天增加一個檔案,如果我用以下的方式寫則會出現Error..
: : 請問fopen要如何使用在動態的檔案名稱上呢??
: : string strdate="20121012";
: : FILE* fw=fopen("..\\Temp\\"+strdate,"wb");
: fopen 是 c 的 function,string 是 c++ 的
: char name[MAX_PATH] = 0;
^這裡怎麼能編過的我很好奇
: sprintf(name, "..\\Temp\\%s", "20121012");

請愛用 snprintf

snprintf( name, sizeof(name), "..\\Temp\\%s", strdate.c_str() );

想用 std::string 也無不可

fopen( (std::string("..\\Temp\\")+strdate).c_str(), "wb" );

: FILE* fw = fopen(name, "wb");
: : 2.fwrite的問題
: : 目前有個字串,假設為
: : string hextemp="1F 08 08 0A 3A 5C 2E 6F 05"
: : 如果我要以16進制存成.JPG檔,那麼我需要去處理字串中間的空格嗎??
: : 還是只需要把字串直接用fwrite寫成檔案就可以了呢??
: : 目前一直卡在這邊,腦袋一直轉不過來...
: : 我想到的是,先把以上字串存入字元陣列,再用strtok去除中間空格..
: : 然後再把每一個16進位寫到另一個陣列中
: : char temp[]={1F,08,08,0A,3A,5C,2E,6F,05}
: : fwrite(temp, sizeof(temp), 1, fw)
: : 然後再寫入檔案,不曉得是不是我搞錯方向了?其實不用那麼麻煩?
: "1F 08 08 ..." 是字串,
: 以 ANSI C 來說是 char array。
: "1F ..." 中,
: 1 是 ASCII table 中的 49,佔 8 bytes,
: F 是 ASCII table 中的 70,佔 8 bytes...
標準沒有寫字元編碼是用 ASCII
: 你想要的應該是把 0x1F08080A... 大小的值寫到 fw 中。
寫入 1F 08 08... 跟寫入 0x1F0808... 兩操作的結果不一定相等
: 先把 hextemp 轉成 char array,
: 再使用 pointer 去指這個 array 並依序 dereference,
: 每兩個非空白字元,
: 就套一次 atoi(),(說明:(char*) "1F\0" 轉成 (int) 0x1F)
: 再把結果寫至 fw。
據我所知 atoi 是無法解析 hex 字串的.

標準作法:

#include <stdint.h>
#include <inttypes.h>

char const * input = "1F 08 08 0A 3A 5C 2E 6F 05";

while( *input ) {
// 間隔任意數目空白
while( isspace(*input) )
++input;

uint8_t value;
sscanf( input, "%" SCNx8, &value );
fwrite( &value, sizeof(value), 1, fw );

input += 2;
}

注意標色地方需剛好為 8 bits 且沒有任何 padding 才能容納
讀入的數值,


--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.121.221.215
※ 編輯: loveme00835 來自: 140.121.221.215 (10/13 04:04)
EdisonX:借碼想問,有沒有printf對於 inttype.h 資料型態格式說明? 10/13 04:09
EdisonX:網路上找到的讓我感覺超難用 @@ 感謝 :) 10/13 04:09
loveme00835:直接翻文件 http://goo.gl/Xiew5 10/13 04:33
EdisonX:謝謝 :) 10/13 14:43
changyuheng:謝謝板主指正 10/15 13:50

你可能也想看看

搜尋相關網站