線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1231
推到 Plurk!
推到 Facebook!

在WINCE用VC++ 的WriteFiles函數寫入一各char到Test.txt 出現亂碼?

答題得分者是:aftcast
a0815
一般會員


發表:4
回覆:5
積分:1
註冊:2007-08-20

發送簡訊給我
#1 引用回覆 回覆 發表時間:2011-05-02 14:55:45 IP:59.125.xxx.xxx 訂閱

typedef struct _GSR_XYZT
{
CHAR x;
CHAR y;
CHAR z;
CHAR t;
}GSR_XYZT, *PGSR_XYZT;

GSR_XYZT gsr_xyzt;
DWORD dwWritenSize = 0;

g_hFile = CreateFile(TEXT("\\Test.txt"),GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL) ;

DeviceIoControl(m_hgsr, GSR_IO_GET_XYZT, &gsr_data_xyzt, sizeof(gsr_data_xyzt), &gsr_xyzt, sizeof(gsr_xyzt), NULL, NULL);

WriteFile(g_hFile,&gsr_xyzt, sizeof(gsr_xyzt),&dwWritenSize,NULL);

[/code]
aftcast
站務副站長


發表:81
回覆:1482
積分:1762
註冊:2002-11-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2011-05-05 01:01:33 IP:122.126.xxx.xxx 訂閱
亂碼是正常的啊。你寫的是char,但事實上看你的程式,它應該是放"數值"   0x00-0xFF  。  若char 放入的值是 0x10好了,你看到的當然就是亂碼。但這是正常的,也是正確的。

你應該用ultraedit之類的來開,並用hex的模式來觀察你要的結果。而不是一般的記事本。除非GSR_XYZT 這個結構體裡真的放的是英文字 'A' 'B' 之類的,但我覺得它是放 "數值"。

char 不是就是字元,它也是數值,這要搞清楚。


===================引 用 a0815 文 章===================
我要在WINCE用VC 的WriteFiles函數寫入一各char到Test.txt 後
在pc用記事本打開出現亂碼?請問如何解決?
以下是我的程式:

[code cpp]

typedef struct _GSR_XYZT
{
CHAR x;
CHAR y;
CHAR z;
CHAR t;
}GSR_XYZT, *PGSR_XYZT;

GSR_XYZT gsr_xyzt;
DWORD dwWritenSize = 0;

g_hFile = CreateFile(TEXT("\\Test.txt"),GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL) ;

DeviceIoControl(m_hgsr, GSR_IO_GET_XYZT, &gsr_data_xyzt, sizeof(gsr_data_xyzt), &gsr_xyzt, sizeof(gsr_xyzt), NULL, NULL);

WriteFile(g_hFile,&gsr_xyzt, sizeof(gsr_xyzt),&dwWritenSize,NULL);

[/code]
------



蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
a0815
一般會員


發表:4
回覆:5
積分:1
註冊:2007-08-20

發送簡訊給我
#3 引用回覆 回覆 發表時間:2011-05-12 16:50:33 IP:115.80.xxx.xxx 訂閱

Dear sir,
太厲害了!GSR_XYZT 是數值沒錯,MEMS3軸加速度計回傳的XYZ值,在手機上的edit元件顯示正常,但存在PC的text.txt檔後打開就是亂碼~
請問有人知道怎轉換嗎?我用過WideCharToMultiByte 但都出現錯誤....


===================引 用 aftcast 文 章===================
亂碼是正常的啊。你寫的是char,但事實上看你的程式,它應該是放"數值" 0x00-0xFF 。 若char 放入的值是 0x10好了,你看到的當然就是亂碼。但這是正常的,也是正確的。

你應該用ultraedit之類的來開,並用hex的模式來觀察你要的結果。而不是一般的記事本。除非GSR_XYZT 這個結構體裡真的放的是英文字 'A' 'B' 之類的,但我覺得它是放 "數值"。

char 不是就是字元,它也是數值,這要搞清楚。

===================引 用 a0815 文 章===================
我要在WINCE用VC 的WriteFiles函數寫入一各char到Test.txt 後
在pc用記事本打開出現亂碼?請問如何解決?
以下是我的程式:
[code cpp]

typedef struct _GSR_XYZT
{
CHAR x;
CHAR y;
CHAR z;
CHAR t;
}GSR_XYZT, *PGSR_XYZT;

GSR_XYZT gsr_xyzt;
DWORD dwWritenSize = 0;

g_hFile = CreateFile(TEXT("\\Test.txt"),GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL) ;

DeviceIoControl(m_hgsr, GSR_IO_GET_XYZT, &gsr_data_xyzt, sizeof(gsr_data_xyzt), &gsr_xyzt, sizeof(gsr_xyzt), NULL, NULL);

WriteFile(g_hFile,&gsr_xyzt, sizeof(gsr_xyzt),&dwWritenSize,NULL);
[/code]
aftcast
站務副站長


發表:81
回覆:1482
積分:1762
註冊:2002-11-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2011-05-12 17:12:20 IP:210.64.xxx.xxx 訂閱
我想你可能還是沒搞懂我說的。我上面有和你說,你看到的是亂碼,這是正常的!!!   且是應該的。若不是亂碼,我還會訝異!

你說在手機上的edit元件上顯示正常,那就表示他有用 _itoa 或 _itow 或他用了mfc裡的把元件的"值"設成member,然後updatedata的方式(我想你若會寫vc,你應該知道我講什麼),這個updatedata的方式已隱含了mfc幫你把"數值"轉成"字串"。

數值的 123 與 字串的 "123" 是不同的。你若把數寫入檔案,那肯定是亂碼。若你寫入的是 "數串",那才會讓你在文字檔中看到123。


但,你「直接的把結構體的數值」寫入檔案,你期望看到什麼? 123 ?? 當然是不可能的。 你必需要把x,y,z,t 等數值,經_itoa 或 _itow後,得到"數字串",然後再寫入檔案! 這樣才會是你預期的。 把 123 變 "123" 了解嗎? 123的數值只有一個byte,但"123"是至少3個byte。一個char 是一個byte。

如果你看了幾遍我說的還是不明白,那…真的要在自加強內力了!

對了,那個與WideCharToMultiByte一點關係也沒有!


===================引 用 a0815 文 章===================

Dear sir,
太厲害了!GSR_XYZT是數值沒錯,MEMS3軸加速度計回傳的XYZ值,在手機上的edit元件顯示正常,但存在PC的text.txt檔後打開就是亂碼~
請問有人知道怎轉換嗎?我用過WideCharToMultiByte 但都出現錯誤....


===================引 用 aftcast 文 章===================
亂碼是正常的啊。你寫的是char,但事實上看你的程式,它應該是放"數值" 0x00-0xFF 。 若char 放入的值是 0x10好了,你看到的當然就是亂碼。但這是正常的,也是正確的。

你應該用ultraedit之類的來開,並用hex的模式來觀察你要的結果。而不是一般的記事本。除非GSR_XYZT 這個結構體裡真的放的是英文字 'A' 'B' 之類的,但我覺得它是放 "數值"。

char 不是就是字元,它也是數值,這要搞清楚。

===================引 用 a0815 文 章===================
我要在WINCE用VC 的WriteFiles函數寫入一各char到Test.txt 後
在pc用記事本打開出現亂碼?請問如何解決?
以下是我的程式:
[code cpp]

typedef struct _GSR_XYZT
{
CHAR x;
CHAR y;
CHAR z;
CHAR t;
}GSR_XYZT, *PGSR_XYZT;

GSR_XYZT gsr_xyzt;
DWORD dwWritenSize = 0;

g_hFile = CreateFile(TEXT("\\Test.txt"),GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL) ;

DeviceIoControl(m_hgsr, GSR_IO_GET_XYZT, &gsr_data_xyzt, sizeof(gsr_data_xyzt), &gsr_xyzt, sizeof(gsr_xyzt), NULL, NULL);

WriteFile(g_hFile,&gsr_xyzt, sizeof(gsr_xyzt),&dwWritenSize,NULL);
[/code]
------



蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
編輯記錄
aftcast 重新編輯於 2011-05-12 03:16:40, 註解 無‧
系統時間:2017-10-23 10:25:47
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!