日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

ascii码扩展 php,php与ascii码

發布時間:2025/3/12 php 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ascii码扩展 php,php与ascii码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

首先 簡單說一下歷史,ascii碼最開始是美國人搞出來的,用來干什么呢?我們知道,計算機只知道0和1,如果我們要計算機識別除了01之外的字符,例如 'a',我們要先告訴計算機‘1100001’就是'a'。跟摩斯密碼一樣,敲幾下三長兩短就是代表sos(開玩笑)。所謂的字符編碼,就是跟計算機打交 道,跟計算機約定一連串的0101到底代表了什么字符。

ascii編碼是鼻祖了,不過由于ascii只有8bits,而且實際上用到的是7位,所以能表示的只有128個字符(00000000~01111111)。這128個字符包括了可打印的普通字符,也包括了不可打印的命令字符。看下表。

這128個字符,對于美國人來說,應該是足夠了。但對于一些使用非英文字符的國家地區,例如拉丁文,發文,俄文,中文,這就絕對不夠。

所以后來就有人搞了擴展的ascii,也有人搞了新的字符編碼,在原來的8位基礎上擴展到16位,32位。我們常見的ISOxxxx,GB2312,GBK,BIG 5,unicode....都是后來發展起來的。

雖然這 些字符編碼有些之間是不兼容,例如就中文而言,gb2312是不兼容unicode的,就是說,同一個漢字,底層約定的二進制是不一樣的。網頁上的亂碼就 是出于此。但是這些后來發展的字符編碼都向下兼容了ascii。這就是為什么utf-8(unicode)和gbk/gb2312顯示英文是不會有亂碼, 而顯示中文會容易亂碼。因為他們都兼容ascii,所以52個字母的顯示都是按ascii標準。但ascii是沒中文的,所以unicode,gbk都按 各自標準解釋了。

從簡單入手,我們先來看ascii標準的編碼。弄清楚PHP里面的二進制,十進制,八進制,十六進制,字符的表示與轉化。

先來說一下一些表示法:

Dec:十進制

Hex:十六進制

Oct:八進制

Bin:二進制

所以數字16表示為:16D = 01H = 018O = 1000 0000B

上面這些都是一些表示法而已。方便給人看的。

=================================================================================================

現在有一個需求,在程序中輸入一個十六進制數,

讓計算機顯示對應的ascii字符。例如就41H就對應A。

方法一:

轉義字符:轉義字符里提供\xdd和\ddd,

\xdd表示十六進制,\ddd表示八進制

所以我們可以:

echo"\x41";//十六進制,\x開頭

echo"\101";//八進制,隨便幾位

?>

注意:轉義字符只提供了十六進制和八進制轉換到字符,沒有提供二進制、十進制轉換到字符。所以要用另外一種方法。

方法二:

用php里面的

chr()函數。這個函數參數很簡單,就是ascii碼對應的十進制,十六進制,八進制。

十進制:直接寫整數

八進制:

第一位肯定是0,后面隨便幾位

十六進制:0xdd

二進制:

字符串

注意:一定要記清楚十六進制是0xdd

echochr(65);//十進制,由于都輸數,所以沒必要加雙引號了

echochr(0x41);//十六進制

echochr(0101);//八進制,三位,最高位補零

echochr('01000001');//二進制,注意,這里的二進制一定要看做字符串,加引號!上面三個都不用加

?>

方法三

用php里面的

printf/sprintf()函數格式化輸出

printf("%c",?0x41);//第二個參數一定不能用單/雙引號

printf("%c",?0101);//第二個參數一定不能用單/雙引號

printf("%c",?65);//第二個參數一定不能用單/雙引號

printf("%c",'01000001');

?>

第二個參數格式基本跟chr()的一樣,8進制,10進制,16進制都不加引號,二進制就要加引號。8進制首位為0,16進制首位為0x。

====================================================================================

現在是根據一個字符提取ascii表中的對應值

方法一:

ord()函數

echoord('A');

?>

輸出結果是65。因而這個函數只能從字符轉化到

十進制。

注意:這個方法只提取第一個字符。如果是一個字符串,那就沒辦法處理后面的字符了。

方法二:

bin2hex()函數:將字符[串]轉換為

16進制

echobin2hex('A');

?>

輸出結果是41。

注意,這個41只是字面數值,沒有16進制的意義。

這個函數不能用一個二進制‘01101...’直接轉到16進制,只能由字符串轉到16進制,真怪

這個函數可以處理字符串

printf/sprintf()函數

.....發現都不行

所以,只能先用ord()轉化為十進制,再轉為二進制,八進制。(以后再看看pack這個函數)

====================================================================================

各種進制 的轉換:

bindec():二進制轉十進制

echobindec(1100);//輸出12,可以加引號,也可以不加

?>

decbin():十進制轉二進制,一樣用

dechex()?:十進制轉16進制

hexdec():16進制轉10進制(參數直接寫值,不用寫0x)

octdec():八進制轉10進制

decoct():10進制轉8進制

base_convert(要轉換的數,原進制,目標進制):任意進制轉換

echo base_convert(123, 6, 2);

?>

注意:上面的這些轉換函數,由于都是數學處理函數,所以參數都不需要是字符串形式(不需要加引號),直接寫數值就行了。

總結

以上是生活随笔為你收集整理的ascii码扩展 php,php与ascii码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。