String 轉 char 函數問題 |
尚未結案
|
g9221712
高階會員 發表:145 回覆:344 積分:162 註冊:2006-07-06 發送簡訊給我 |
各位前輩:
我自己撰寫了一個String 轉 char 函數,但好像都會出現錯誤,懇請大家給予方向。 因為版上好像都沒有類似的函數,我這個函數最主要的功能是取出字串內的字元 然後傳回每一個字,變成char型態,但是都會出現轉換錯誤,不知道錯誤在哪裡,懇請大家提示? function GetChar4String(s: string; POS: Integer): CHAR; var myarray1: array of char; i: Integer; begin setlength(myarray1, 255); for i := 0 to LENGTH(s) - 1 do begin myarray1[i] := Char(PChar(mid(s, i 1, 1))); end; RESULT := myarray1[POS]; end; function Mid(Source: string; Start: integer; Length: integer): string; begin Result := copy(Source, Start, Length); end;
------
「人們所以覺得寂寞,是因為他們會築牆,卻不會搭橋。」 程式寫的越久,卻發現自己越來越不會寫程式! |
jow
尊榮會員 發表:66 回覆:751 積分:1253 註冊:2002-03-13 發送簡訊給我 |
[code delphi] procedure TForm1.Button1Click(Sender: TObject); var I: Integer; S: string; A: array of Char; begin //-------------------------------------------- S := '0123456789'; SetLength(A, Length(S)); try for I := 1 to Length(S) do A[I-1] := S[I]; finally A := nil; end; //-------------------------------------------- S := 'ABCDEFGHIJ'; SetLength(A, Length(S)); try Move(PChar(S)^, Pointer(A)^, Length(A)); Move(S[1], A[0], Length(A)); Move(S[1], PChar(A)^, Length(A)); finally A := nil; end; //-------------------------------------------- end; [/code] [code delphi] procedure TForm1.Button3Click(Sender: TObject); type TArrayOfChar = array of Char; //-------------------------------------------- function String2ArrayOfChar(S: string; var A: TArrayOfChar): Boolean; begin SetLength(A, Length(S)); Move(PChar(S)^, Pointer(A)^, Length(A)); Result := A <> nil; end; //-------------------------------------------- var I: Integer; S: string; A: TArrayOfChar; begin S := '0123456789'; if String2ArrayOfChar(S, A) then try for I := 0 to Length(A)-1 do ListBox1.Items.Add(A[I]); finally A := nil; end; end; [/code] 其實對於字串 S, 它的 S[1]~S[Length(S)] 就是字元陣列了. 而同樣的方法也可以應用在非字元陣列, 如 array of Integer 只要注意搬移時(move)記憶體的大小....^_^ |
syntax
尊榮會員 發表:26 回覆:1139 積分:1258 註冊:2002-04-23 發送簡訊給我 |
實在看不懂你程式的企圖
你的電腦,應該等級一級棒,才會這樣浪費處理時間 如果依據你的要求:「取出字串內的字元,然後傳回每一個字,變成char型態」 var aChar: Char; MyStr: String; aChar := MyStr[位置,由 1 開始]; <----- 請問這樣可以達到你的希望呼? 應該不需要 1. 建立一個新的記憶體區塊 2. 將所有東西,一個一個慢慢,搬到該新的記憶體 3. 才將 ***同一位置*** 的資料取出 還搞出一堆錯誤 String 型別內的每一元素,本來就都是 Byte 型態,沒什麼 Char 不 Char 的 代表什麼,是我們給的意義,如果是 MBS,頂多判斷一下 Leading-Byte ===================引 用 g9221712 文 章=================== 各位前輩: 我自己撰寫了一個String 轉 char 函數,但好像都會出現錯誤,懇請大家給予方向。 因為版上好像都沒有類似的函數,我這個函數最主要的功能是取出字串內的字元 然後傳回每一個字,變成char型態,但是都會出現轉換錯誤,不知道錯誤在哪裡,懇請大家提示? function GetChar4String(s: string; POS: Integer): CHAR; var myarray1: array of char; i: Integer; begin setlength(myarray1, 255); for i := 0 to LENGTH(s) - 1 do begin myarray1[i] := Char(PChar(mid(s, i 1, 1))); end; RESULT := myarray1[POS]; end; function Mid(Source: string; Start: integer; Length: integer): string; begin Result := copy(Source, Start, Length); end; |
g9221712
高階會員 發表:145 回覆:344 積分:162 註冊:2006-07-06 發送簡訊給我 |
前輩:
感謝您的回應,我的企圖其實很簡單啦!向您報告說明一下,我需要將一個字串,使用SendMessage送到另外一個程式中, 就是模擬鍵盤輸入,但是SendMessage需要引入Char型態的變數,而我讀取Memo的每一行字串String,讀出後欲轉換成符合 SendMessage所需的型態Char,我實在不知道怎麼轉換,字串常用、MEMO常用,SendMessage卻是第一次使用, GetChar4String就是為此而產生的,還請前輩提醒,後生晚輩難免愚痴! SendMessage(RHandle, WM_CHAR, 0, PCHAR(trim(Self.DBMemo1.Lines[i]))); ===================引 用 syntax 文 章=================== 實在看不懂你程式的企圖 你的電腦,應該等級一級棒,才會這樣浪費處理時間 如果依據你的要求:「取出字串內的字元,然後傳回每一個字,變成char型態」 var aChar: Char; MyStr: String; aChar := MyStr[位置,由 1 開始]; <----- 請問這樣可以達到你的希望呼? 應該不需要 1. 建立一個新的記憶體區塊 2. 將所有東西,一個一個慢慢,搬到該新的記憶體 3. 才將 ***同一位置*** 的資料取出 還搞出一堆錯誤 String 型別內的每一元素,本來就都是 Byte 型態,沒什麼 Char 不 Char 的 代表什麼,是我們給的意義,如果是 MBS,頂多判斷一下 Leading-Byte ===================引 用 g9221712 文 章=================== 各位前輩: 我自己撰寫了一個String 轉 char 函數,但好像都會出現錯誤,懇請大家給予方向。 因為版上好像都沒有類似的函數,我這個函數最主要的功能是取出字串內的字元 然後傳回每一個字,變成char型態,但是都會出現轉換錯誤,不知道錯誤在哪裡,懇請大家提示? function GetChar4String(s: string; POS: Integer): CHAR; var myarray1: array of char; i: Integer; begin setlength(myarray1, 255); for i := 0 to LENGTH(s) - 1 do begin myarray1[i] := Char(PChar(mid(s, i 1, 1))); end; RESULT := myarray1[POS]; end; function Mid(Source: string; Start: integer; Length: integer): string; begin Result := copy(Source, Start, Length); end;
------
「人們所以覺得寂寞,是因為他們會築牆,卻不會搭橋。」 程式寫的越久,卻發現自己越來越不會寫程式! |
christie
資深會員 發表:30 回覆:299 積分:475 註冊:2005-03-25 發送簡訊給我 |
var
wnd: HWND; i: Integer; s: string; //傳字串給另一程式 s := 'Hello World!'; for i := 1 to Length(s) do SendMessage(wnd, WM_CHAR, Word(s[i]), 0); // Simulate Return Key. PostMessage(wnd, WM_KEYDOWN, VK_RETURN, 0); // Simulate Space. PostMessage(wnd, WM_KEYDOWN, VK_SPACE, 0);
------
What do we live for if not to make life less difficult for each other? |
syntax
尊榮會員 發表:26 回覆:1139 積分:1258 註冊:2002-04-23 發送簡訊給我 |
SendMessage(RHandle, WM_CHAR, 0, PCHAR(trim(Self.DBMemo1.Lines[i])));
trim 可以省了 SendMessage(RHandle, WM_CHAR, 0, PCHAR(Self.DBMemo1.Lines[y][x])); y 為行數,x 為第幾個字 不過這樣並沒有錯誤檢查,如要模擬輸入,最好做一下錯誤檢查,以免傳入的不是鍵盤可以接受的字元,而出現不可避免的狀況 最好 xxx...... Self.DBMemo1.Lines.count 檢查一下行數範圍 Lenght(Self.DBMemo1.Lines[y[) 檢查字數範圍 aChar := Self.DBMemo1.Lines[y][x]; if aChar .... 檢查一下 SendMessage(RHandle, WM_CHAR, 0, PCHAR(aChar )); 再傳,並注意 aChar 的生命週期之範圍,以免對方還沒處理,這方就已經見到佛祖囉 ===================引 用 g9221712 文 章=================== 前輩: 感謝您的回應,我的企圖其實很簡單啦!向您報告說明一下,我需要將一個字串,使用SendMessage送到另外一個程式中, 就是模擬鍵盤輸入,但是SendMessage需要引入Char型態的變數,而我讀取Memo的每一行字串String,讀出後欲轉換成符合 SendMessage所需的型態Char,我實在不知道怎麼轉換,字串常用、MEMO常用,SendMessage卻是第一次使用, GetChar4String就是為此而產生的,還請前輩提醒,後生晚輩難免愚痴! ===================引 用 syntax 文 章=================== 實在看不懂你程式的企圖 你的電腦,應該等級一級棒,才會這樣浪費處理時間 如果依據你的要求:「取出字串內的字元,然後傳回每一個字,變成char型態」 var aChar: Char; MyStr: String; aChar := MyStr[位置,由 1 開始]; <----- 請問這樣可以達到你的希望呼? 應該不需要 1. 建立一個新的記憶體區塊 2. 將所有東西,一個一個慢慢,搬到該新的記憶體 3. 才將 ***同一位置*** 的資料取出 還搞出一堆錯誤 String 型別內的每一元素,本來就都是 Byte 型態,沒什麼 Char 不 Char 的 代表什麼,是我們給的意義,如果是 MBS,頂多判斷一下 Leading-Byte ===================引 用 g9221712 文 章=================== 各位前輩: 我自己撰寫了一個String 轉 char 函數,但好像都會出現錯誤,懇請大家給予方向。 因為版上好像都沒有類似的函數,我這個函數最主要的功能是取出字串內的字元 然後傳回每一個字,變成char型態,但是都會出現轉換錯誤,不知道錯誤在哪裡,懇請大家提示? function GetChar4String(s: string; POS: Integer): CHAR; var myarray1: array of char; i: Integer; begin setlength(myarray1, 255); for i := 0 to LENGTH(s) - 1 do begin myarray1[i] := Char(PChar(mid(s, i 1, 1))); end; RESULT := myarray1[POS]; end; function Mid(Source: string; Start: integer; Length: integer): string; begin Result := copy(Source, Start, Length); end; |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |