Re: [問題] 關於字元
※ 引述《wnick (淺龍勿用)》之銘言:
: ※ 引述《DarkKiller (System hacked)》之銘言:
: : $ perl -MSocket -e 'print inet_ntoa("\x01\x02\x03\x04"), "\n";'
: : 1.2.3.4
: : ==
: : 有專門處理的函數...
: 我大概懂了
: 只是現在我要如何把它轉變成v-string呢
: 因為原本UNPACK是用H8產生8c8615c4
可以不用太理會 v-string 的部份, 因為以後的 Perl 會把這個東西丟掉 .
不過,關於它的定義,請找 perldata 裡的 "Version String" 一節
簡單的說,就是寫成這樣的字面值:
v1.2.3.4
原本的目的是拿來做版號,直接印出來便可以知道它是在做啥:
print v65.66.67;
# 印出 "ABC"
也就是說,它其實是在定義字串,並且用 "." 來分隔每個字元,事實上不需要
前面的 v 也可以:
print 65.66.67; # ABC
Socket 模組裡面,inet_ntoa 的用法就是要你放一個這樣的字串,不用括號:
$a = inet_ntoa(140.112.90.72)
但這樣之後的 $a 是 "140.112.90.72", 140.112.90.72 是 4 個 character,
"140.112.90.72" 則是 13 個 character。你也可以用這種方法得到同樣的效果:
$a = inet_ntoa("\x{8c}pZH");
所以... 說穿了 v-string 還是一個字串,只是不用寫括號,但中間要用 . 分隔
每個字元,並且每個字元要用它的 ord() 值表示,所以:
print 12549.12550.12551.12552;
這樣子就可以印出
ㄅㄆㄇㄈ
當然這個 v-string 並不會落在 IPv4 的範圍裡就是了
Cheers,
Kang-min Liu
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 211.22.54.223
推
06/19 12:24, , 1F
06/19 12:24, 1F
→
06/25 02:06, , 2F
06/25 02:06, 2F
討論串 (同標題文章)