DelphiXE10 3中字元相加導致溢位的問題

2021-09-19 20:55:38 字數 1229 閱讀 7872

測試環境:delphixe10.3

const

s1: ansistring = #100#200;

s2: ansistring = #100 + #200;

begin

showmessage(inttostr(ord(s1[2])));

showmessage(inttostr(ord(s2[2])));

end;

原本一直以為上面**出來的結果應該是一樣的。但是在xe10.3中測試結果卻顯示,第乙個對話方塊結果為200,而第二個對話方塊顯示為63。

經過測試驗證,當使用+符號對字元進行串接時,#128(#$80)以下的字元是正常的,一旦超過#128就會溢位變成#63(#$3f)。

尚不明確是否有哪個編譯指令開關可以控制這一編譯器行為,目前的解決方案是不要使用+,而是全部寫在一起不換行。

ps:19.12.6 補充來自q群內大神菜根提供的解決方案

一、顯性告訴編譯器我們需要的是rawbytestring

//原**如下,編譯後,部分位元組會變成#63

template: rawbytestring = #$55#$8b#$ec#$83#$c4#$f8#$c7#$45#$f8#$21#$43#$65#$87 +

#$8b#$45#$10#$50#$8b#$4d#$0c#$8b#$55#$08#$b8#$78#$56#$34#$12#$ff#$55#$f8#$89 +

#$45#$fc#$8b#$45#$fc#$59#$59#$5d#$c2#$0c#$00;

//改為以下,顯性告訴編譯器,每行都是rawbytestring,可以避免錯誤

template: rawbytestring = rawbytestring(#$55#$8b#$ec#$83#$c4#$f8#$c7#$45#$f8#$21#$43#$65#$87) +

rawbytestring(#$8b#$45#$10#$50#$8b#$4d#$0c#$8b#$55#$08#$b8#$78#$56#$34#$12#$ff#$55#$f8#$89) +

rawbytestring(#$45#$fc#$8b#$45#$fc#$59#$59#$5d#$c2#$0c#$00);

二、將project的codepage設定為1252

字串中的數字相加

將字串中的數字相加 思路 1.需要將各個值放到陣列中,相當於各個字元的分割符,將各個值拆分出來,用分割符號來分割字串,得到陣列 2.需要遍歷陣列,看看哪些屬於數值 只是將數值進行相加的運算 需要弄清楚哪些屬於數值,哪些屬於字串 需讓程式識別出來 注 其它字元 不是數字的 不進行相加運算 1.用分割符...

string C 字串相加中容易出現的錯誤

問題的開始 在編譯原理的詞法分析器中,進行字串相加時出現了報錯的情況,和報錯如下 str是字元型指標 string pstr str i str i 1 報錯提示為 c users zwx desktop test.cpp 130 error conversion from int to non s...

php中的數值型字串相加 相比較

一。php中數值型字串相加 1.若兩個字串開頭沒有有效數值或不是數值型字串,這兩個字串相加時都看成0 eg a abc b b01 a b是0 2.兩個數值型字串相加時,有效數字進行相加。eg a 100 b 01a a b 101 3 如果字串中帶有 e e 時,按float型數字處理。eg a ...