主頁 > 前端設計 > 在C中將整數的二進制檔案讀取為十進制和十六進制值

在C中將整數的二進制檔案讀取為十進制和十六進制值

2022-04-06 19:20:39 前端設計

我正在嘗試讀取datafileC 中的二進制檔案。這個二進制檔案顯然包含 32 位(4 位元組)整數。我被告知二進制檔案是使用以下代碼片段生成的:

#include <fcntl.h>
#include <stdint.h>
#include <unistd.h>
.....
    int  fd = open("datafile", O_CREAT|O_WRONLY, 0600);

    if(fd >= 0) {        //  IFF FILE OPENED SUCCESSFULLY
        for(int32_t i = -50 ; i<50 ; i  ) {
            write(fd, &i, sizeof(i));
        }
        close(fd);
    }

我得到了以下用于讀取二進制檔案的代碼:

#include <stdio.h>
#include <fcntl.h>
#include <stdint.h>
#include <unistd.h>

int main(void) {

        int fd = open("datafile", O_RDONLY, 0);

        if(fd >= 0) {
                for(int32_t i = -50; i < 50; i  ) {
                        int32_t value;

                        read(fd, &value, sizeof(value));
                        printf("%4i\t0xx\ti\t0xx\n", i, i, value, value);
                }
                close(fd);
        }
return 0;
}

有人告訴我,這段代碼應該將二進制檔案的值列印為十進制和十六進制值。我的輸出如下:

 -50    0xffffffce         255  0x000000ff
 -49    0xffffffcf         255  0x000000ff
 -48    0xffffffd0         255  0x000000ff
 -47    0xffffffd1         255  0x000000ff
 -46    0xffffffd2         255  0x000000ff
 -45    0xffffffd3         255  0x000000ff
 -44    0xffffffd4         255  0x000000ff
 -43    0xffffffd5         255  0x000000ff
 -42    0xffffffd6         255  0x000000ff
 -41    0xffffffd7         255  0x000000ff
 -40    0xffffffd8         255  0x000000ff
 -39    0xffffffd9         255  0x000000ff
 -38    0xffffffda         255  0x000000ff
 -37    0xffffffdb         255  0x000000ff
 -36    0xffffffdc         255  0x000000ff
 -35    0xffffffdd         255  0x000000ff
 -34    0xffffffde         255  0x000000ff
 -33    0xffffffdf         255  0x000000ff
 -32    0xffffffe0         255  0x000000ff
 -31    0xffffffe1         255  0x000000ff
 -30    0xffffffe2         255  0x000000ff
 -29    0xffffffe3         255  0x000000ff
 -28    0xffffffe4         255  0x000000ff
 -27    0xffffffe5         255  0x000000ff
 -26    0xffffffe6         255  0x000000ff
 -25    0xffffffe7         255  0x000000ff
 -24    0xffffffe8         255  0x000000ff
 -23    0xffffffe9         255  0x000000ff
 -22    0xffffffea         255  0x000000ff
 -21    0xffffffeb         255  0x000000ff
 -20    0xffffffec         255  0x000000ff
 -19    0xffffffed         255  0x000000ff
 -18    0xffffffee         255  0x000000ff
 -17    0xffffffef         255  0x000000ff
 -16    0xfffffff0         255  0x000000ff
 -15    0xfffffff1         255  0x000000ff
 -14    0xfffffff2         255  0x000000ff
 -13    0xfffffff3         255  0x000000ff
 -12    0xfffffff4         255  0x000000ff
 -11    0xfffffff5         255  0x000000ff
 -10    0xfffffff6         255  0x000000ff
  -9    0xfffffff7         255  0x000000ff
  -8    0xfffffff8         255  0x000000ff
  -7    0xfffffff9         255  0x000000ff
  -6    0xfffffffa         255  0x000000ff
  -5    0xfffffffb         255  0x000000ff
  -4    0xfffffffc         255  0x000000ff
  -3    0xfffffffd         255  0x000000ff
  -2    0xfffffffe         255  0x000000ff
  -1    0xffffffff         255  0x000000ff
   0    0x00000000         255  0x000000ff
   1    0x00000001         255  0x000000ff
   2    0x00000002         255  0x000000ff
   3    0x00000003         255  0x000000ff
   4    0x00000004         255  0x000000ff
   5    0x00000005         255  0x000000ff
   6    0x00000006         255  0x000000ff
   7    0x00000007         255  0x000000ff
   8    0x00000008         255  0x000000ff
   9    0x00000009         255  0x000000ff
  10    0x0000000a         255  0x000000ff
  11    0x0000000b         255  0x000000ff
  12    0x0000000c         255  0x000000ff
  13    0x0000000d         255  0x000000ff
  14    0x0000000e         255  0x000000ff
  15    0x0000000f         255  0x000000ff
  16    0x00000010         255  0x000000ff
  17    0x00000011         255  0x000000ff
  18    0x00000012         255  0x000000ff
  19    0x00000013         255  0x000000ff
  20    0x00000014         255  0x000000ff
  21    0x00000015         255  0x000000ff
  22    0x00000016         255  0x000000ff
  23    0x00000017         255  0x000000ff
  24    0x00000018         255  0x000000ff
  25    0x00000019         255  0x000000ff
  26    0x0000001a         255  0x000000ff
  27    0x0000001b         255  0x000000ff
  28    0x0000001c         255  0x000000ff
  29    0x0000001d         255  0x000000ff
  30    0x0000001e         255  0x000000ff
  31    0x0000001f         255  0x000000ff
  32    0x00000020         255  0x000000ff
  33    0x00000021         255  0x000000ff
  34    0x00000022         255  0x000000ff
  35    0x00000023         255  0x000000ff
  36    0x00000024         255  0x000000ff
  37    0x00000025         255  0x000000ff
  38    0x00000026         255  0x000000ff
  39    0x00000027         255  0x000000ff
  40    0x00000028         255  0x000000ff
  41    0x00000029         255  0x000000ff
  42    0x0000002a         255  0x000000ff
  43    0x0000002b         255  0x000000ff
  44    0x0000002c         255  0x000000ff
  45    0x0000002d         255  0x000000ff
  46    0x0000002e         255  0x000000ff
  47    0x0000002f         255  0x000000ff
  48    0x00000030         255  0x000000ff
  49    0x00000031         255  0x000000ff

但輸出實際上應該如下:

 -50    0xffffffce      -822083585      0xceffffff
 -49    0xffffffcf      -805306369      0xcfffffff
 -48    0xffffffd0      -788529153      0xd0ffffff
.....
  -3    0xfffffffd       -33554433      0xfdffffff
  -2    0xfffffffe       -16777217      0xfeffffff
  -1    0xffffffff              -1      0xffffffff
   0    0x00000000               0      0x00000000
   1    0x00000001        16777216      0x01000000
   2    0x00000002        33554432      0x02000000
   3    0x00000003        50331648      0x03000000
.....
  47    0x0000002f       788529152      0x2f000000
  48    0x00000030       805306368      0x30000000
  49    0x00000031       822083584      0x31000000

如您所見,盡管我的前兩列似乎與預期的一樣,但最后兩列與應有的完全不同。我的最后兩列只是重復列印出相同的兩個值255和。0x000000ff這是怎么回事,我該如何解決?

uj5u.com熱心網友回復:

將評論轉換為答案。

JL:如果檔案是在讀取檔案的同一臺機器上寫入的,我看不出如何從輸入資料中獲得“預期輸出”。似乎期望該檔案是在小端機器上生成并在大端機器上讀取的,反之亦然。

TP:我從來沒有聽說過這個“endian”的概念。我正在使用 macOS,如果有幫助的話。

JL:你知道是誰創建了資料檔案嗎?是您在您的 Mac 上,還是其他人(講師)創建的?你知道他們在什么機器上創建它嗎?您可以在Endianness的 Wikipedia(還有哪里?)上找到有關“endian-ness”的資訊您的 Mac 可能使用 Intel 芯片,因此使用 little-endian 順序。AFAIK,即使是 M1 Mac 也使用 little-endian。但是 SPARC 和 PowerPC 使用大端順序(盡管 PowerPC 現在是可切換的,并且有一個 PPC-LE 版本的 Linux)。

TP:看起來二進制檔案可能是在“Sun SPARC 計算機”上創建的(代碼可能已經執行過)。但它暗示讀取這個二進制檔案應該在 Intel 64 位 x86 處理器上作業(顯然,我們不期望我們應該使用 Sun SPARC 計算機)。

JL:正如我在之前的評論中添加的,SPARC 是一個大端機器。因此,您現在需要找出操作value未設定的原因read檢查 from 的回傳值read()可能會提供資訊——如果不是 4,則有問題。是的,您可以毫無問題地讀取 Mac 上的資料,然后您應該會得到類似預期的輸出。

TP:我只是一個初學者的系統程式員,所以這遠遠超出了我所知道的范圍。根據 POSIX read()read()回傳一個int,所以我在一個變數中捕獲了該值并將其列印出來。它列印出 0,根據檔案,這似乎與預期的一樣。為什么我們期望它是 4?

read()函式被告知最多讀取 N 個位元組并回傳它實際讀取的位元組數。零位元組讀取意味著“沒有更多資料”,俗稱 EOF 或“檔案結尾”。當你要求它讀取 4 個位元組時,它應該回傳 4,除非檔案中沒有那么多資料。

JL:對資料檔案進行十六進制轉儲:xxd datafile | sed 1q應該產生00000000: ffff ffce ffff ffcf ffff ffd0 ffff ffd1(加上一系列 16 個點)。如果不是,則您的資料已損壞。我在我的 Mac 上撰寫了一個程式,以大端格式寫入資料(我使用在磁盤上使用大端格式的 DBMS,所以我有工具),然后你的閱讀代碼會產生預期的輸出。所以,我很困惑為什么你會得到 255/0x000000ff 輸出。您是否重新檢查過您沒有從閱讀代碼中洗掉任何字符。并檢查來自的回傳值read()

JL:為了清楚一點:使用大端資料檔案和問題中的讀取代碼,我在我的 Mac 上得到了預期的輸出(這個運行的是 Big Sur 11.6.5)。

TP: As I said, read returned 0, so I think that's as expected. Using xxd datafile | sed 1q, I got 00000000: ff .. So a small number of characters, then a lot of whitespace, and then a .. It seems very odd to me.

JL: Your data file is corrupted. It should have 400 bytes (ls -l datafile). And read() should only return 0 when it reaches the end of the file; every other time, it should return 4 (sizeof(int32_t) or sizeof(value)). You get 255 because there is a single byte with value 0xFF aka 255 (and the computing gods smiled on you — or maybe cursed you — and set the other bytes of value to 0).

TP: You're right! The file size was 400 bytes when I downloaded it, but it is now 1 byte! I have no idea how that happened. I have now re-downloaded it, and it seems to be working as expected! […]

Two lessons

  1. Check return values — especially from I/O functions.
  2. Check your data files (ls -l, xxd, etc) to make sure they contain what you expect.

wr71le.c

This writes in 'native order' which is little-endian on an Intel machine.

#include <fcntl.h>
#include <stdint.h>
#include <unistd.h>

int main(void)
{
    int fd = open("datafile", O_CREAT | O_WRONLY, 0600);

    if (fd >= 0)
    {
        for (int32_t i = -50; i < 50; i  )
        {
            write(fd, &i, sizeof(i));
        }
        close(fd);
    }
    return 0;
}

wr71be.c

This writes in big-endian order on any type of machine — big-endian or little-endian.

#include <fcntl.h>
#include <stdint.h>
#include <unistd.h>

typedef int32_t Sint4;    // The st_sint4() code uses this type name

/*
**  Convert signed 4-byte signed integer into 4-byte character array.
*/
static void st_sint4(Sint4 l, char *s)
{
    s  = sizeof(Sint4) - 1;
    *s-- = l & 0xFF;
    l >>= 8;
    *s-- = l & 0xFF;
    l >>= 8;
    *s-- = l & 0xFF;
    l >>= 8;
    *s   = l & 0xFF;
}

int main(void)
{
    int fd = open("datafile", O_CREAT | O_WRONLY, 0600);

    if (fd >= 0)
    {
        for (int32_t i = -50; i < 50; i  )
        {
            char data[4];
            st_sint4(i, data);
            write(fd, data, sizeof(data));
        }
        close(fd);
    }
    return 0;
}

Output from xxd datafile

00000000: ffff ffce ffff ffcf ffff ffd0 ffff ffd1  ................
00000010: ffff ffd2 ffff ffd3 ffff ffd4 ffff ffd5  ................
00000020: ffff ffd6 ffff ffd7 ffff ffd8 ffff ffd9  ................
00000030: ffff ffda ffff ffdb ffff ffdc ffff ffdd  ................
00000040: ffff ffde ffff ffdf ffff ffe0 ffff ffe1  ................
00000050: ffff ffe2 ffff ffe3 ffff ffe4 ffff ffe5  ................
00000060: ffff ffe6 ffff ffe7 ffff ffe8 ffff ffe9  ................
00000070: ffff ffea ffff ffeb ffff ffec ffff ffed  ................
00000080: ffff ffee ffff ffef ffff fff0 ffff fff1  ................
00000090: ffff fff2 ffff fff3 ffff fff4 ffff fff5  ................
000000a0: ffff fff6 ffff fff7 ffff fff8 ffff fff9  ................
000000b0: ffff fffa ffff fffb ffff fffc ffff fffd  ................
000000c0: ffff fffe ffff ffff 0000 0000 0000 0001  ................
000000d0: 0000 0002 0000 0003 0000 0004 0000 0005  ................
000000e0: 0000 0006 0000 0007 0000 0008 0000 0009  ................
000000f0: 0000 000a 0000 000b 0000 000c 0000 000d  ................
00000100: 0000 000e 0000 000f 0000 0010 0000 0011  ................
00000110: 0000 0012 0000 0013 0000 0014 0000 0015  ................
00000120: 0000 0016 0000 0017 0000 0018 0000 0019  ................
00000130: 0000 001a 0000 001b 0000 001c 0000 001d  ................
00000140: 0000 001e 0000 001f 0000 0020 0000 0021  ........... ...!
00000150: 0000 0022 0000 0023 0000 0024 0000 0025  ..."...#...$...%
00000160: 0000 0026 0000 0027 0000 0028 0000 0029  ...&...'...(...)
00000170: 0000 002a 0000 002b 0000 002c 0000 002d  ...*... ...,...-
00000180: 0000 002e 0000 002f 0000 0030 0000 0031  ......./...0...1

rd71.c

This reads in native byte order.

#include <fcntl.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(void)
{
    int fd = open("datafile", O_RDONLY, 0);

    if (fd >= 0)
    {
        for (int32_t i = -50; i < 50; i  )
        {
            int32_t value;

            if (read(fd, &value, sizeof(value)) != sizeof(value))
            {
                fprintf(stderr, "Faulty read!\n");
                exit(EXIT_FAILURE);
            }
            printf("%4i\t0xx\ti\t0xx\n", i, i, value, value);
        }
        close(fd);
    }
    return 0;
}

Output from rd71

 -50    0xffffffce  -822083585  0xceffffff
 -49    0xffffffcf  -805306369  0xcfffffff
 -48    0xffffffd0  -788529153  0xd0ffffff
 -47    0xffffffd1  -771751937  0xd1ffffff
 -46    0xffffffd2  -754974721  0xd2ffffff
 -45    0xffffffd3  -738197505  0xd3ffffff
 -44    0xffffffd4  -721420289  0xd4ffffff
 -43    0xffffffd5  -704643073  0xd5ffffff
 -42    0xffffffd6  -687865857  0xd6ffffff

…snip…

  40    0x00000028   671088640  0x28000000
  41    0x00000029   687865856  0x29000000
  42    0x0000002a   704643072  0x2a000000
  43    0x0000002b   721420288  0x2b000000
  44    0x0000002c   738197504  0x2c000000
  45    0x0000002d   754974720  0x2d000000
  46    0x0000002e   771751936  0x2e000000
  47    0x0000002f   788529152  0x2f000000
  48    0x00000030   805306368  0x30000000
  49    0x00000031   822083584  0x31000000

轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/456457.html

標籤:C 十六进制 二进制文件

上一篇:新手:將指標傳遞給函式

下一篇:需要幫助在printf中舍入一個雙數

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • vue移動端上拉加載

    可能做得過于簡單或者比較low,請各位大佬留情,一起探討技術 ......

    uj5u.com 2020-09-10 04:38:07 more
  • 優美網站首頁,頂部多層導航

    一個個人用的瀏覽器首頁,可以把一下常用的網站放在這里,平常打開會比較方便。 第一步,HTML代碼 <script src=https://www.cnblogs.com/szharf/p/"js/jquery-3.4.1.min.js"></script> <div id="navigate"> <ul> <li class="labels labels_1"> ......

    uj5u.com 2020-09-10 04:38:47 more
  • 頁面為要加<!DOCTYPE html>

    最近因為寫一個js函式,需要用到$(window).height(); 由于手寫demo的時候,過于自信,其實對前端方面的認識也不夠體系,用文本檔案直接敲出來的html代碼,第一行沒有加上<!DOCTYPE html> 導致了$(window).height();的結果直接是整個document的高 ......

    uj5u.com 2020-09-10 04:38:52 more
  • WordPress網站程式手動升級要做好資料備份

    WordPress博客網站程式在進行升級前,必須要做好網站資料的備份,這個問題良家佐言是遇見過的;在剛開始接觸WordPress博客程式的時候,因為升級問題和博客網站的修改的一些嘗試,良家佐言是吃盡了苦頭。因為購買的是西部數碼的空間和域名,每當佐言把自己的WordPress博客網站搞到一塌糊涂的時候 ......

    uj5u.com 2020-09-10 04:39:30 more
  • WordPress程式不能升級為5.4.2版本的原因

    WordPress是一款個人博客系統,受到英文博客愛好者和中文博客愛好者的追捧,并逐步演化成一款內容管理系統軟體;它是使用PHP語言和MySQL資料庫開發的,用戶可以在支持PHP和MySQL資料庫的服務器上使用自己的博客。每一次WordPress程式的更新,就會牽動無數WordPress愛好者的心, ......

    uj5u.com 2020-09-10 04:39:49 more
  • 使用CSS3的偽元素進行首字母下沉和首行改變樣式

    網頁中常見的一種效果,首字改變樣式或者首行改變樣式,效果如下圖。 代碼: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, ......

    uj5u.com 2020-09-10 04:40:09 more
  • 關于a標簽的講解

    什么是a標簽? <a> 標簽定義超鏈接,用于從一個頁面鏈接到另一個頁面。 <a> 元素最重要的屬性是 href 屬性,它指定鏈接的目標。 a標簽的語法格式:<a href=https://www.cnblogs.com/summerxbc/p/"指定要跳轉的目標界面的鏈接">需要展示給用戶看見的內容</a> a標簽 在所有瀏覽器中,鏈接的默認外觀如下: 未被訪問的鏈接帶 ......

    uj5u.com 2020-09-10 04:40:11 more
  • 前端輪播圖

    在需要輪播的頁面是引入swiper.min.js和swiper.min.css swiper.min.js地址: 鏈接:https://pan.baidu.com/s/15Uh516YHa4CV3X-RyjEIWw 提取碼:4aks swiper.min.css地址 鏈接:https://pan.b ......

    uj5u.com 2020-09-10 04:40:13 more
  • 如何設定html中的背景圖片(全屏顯示,且不拉伸)

    1 <style>2 body{background-image:url(https://uploadbeta.com/api/pictures/random/?key=BingEverydayWallpaperPicture); 3 background-size:cover;background ......

    uj5u.com 2020-09-10 04:40:16 more
  • Java學習——HTML詳解(上)

    HTML詳解 初識HTML Hyper Text Markup Language(超文本標記語言) 1 <!--DOCTYPE:告訴瀏覽器我們要使用什么規范--> 2 <!DOCTYPE html> 3 <html lang="en"> 4 <head> 5 <!--meta 描述性的標簽,描述一些 ......

    uj5u.com 2020-09-10 04:40:33 more
最新发布
  • 我的第一個NPM包:panghu-planebattle-esm(胖虎飛機大戰)使用說明

    好家伙,我的包終于開發完啦 歡迎使用胖虎的飛機大戰包!! 為你的主頁添加色彩 這是一個有趣的網頁小游戲包,使用canvas和js開發 使用ES6模塊化開發 效果圖如下: (覺得圖片太sb的可以自己改) 代碼已開源!! Git: https://gitee.com/tang-and-han-dynas ......

    uj5u.com 2023-04-20 07:59:23 more
  • 生產事故-走近科學之消失的JWT

    入職多年,面對生產環境,盡管都是小心翼翼,慎之又慎,還是難免捅出簍子。輕則滿頭大汗,面紅耳赤。重則系統停擺,損失資金。每一個生產事故的背后,都是寶貴的經驗和教訓,都是專案成員的血淚史。為了更好地防范和遏制今后的各類事故,特開此專題,長期更新和記錄大大小小的各類事故。有些是親身經歷,有些是經人耳傳口授 ......

    uj5u.com 2023-04-18 07:55:04 more
  • 記錄--Canvas實作打飛字游戲

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 打開游戲界面,看到一個畫面簡潔、卻又富有挑戰性的游戲。螢屏上,有一個白色的矩形框,里面不斷下落著各種單詞,而我需要迅速地輸入這些單詞。如果我輸入的單詞與螢屏上的單詞匹配,那么我就可以獲得得分;如果我輸入的單詞錯誤或者時間過長,那么我就會輸 ......

    uj5u.com 2023-04-04 08:35:30 more
  • 了解 HTTP 看這一篇就夠

    在學習網路之前,了解它的歷史能夠幫助我們明白為何它會發展為如今這個樣子,引發探究網路的興趣。下面的這張圖片就展示了“互聯網”誕生至今的發展歷程。 ......

    uj5u.com 2023-03-16 11:00:15 more
  • 藍牙-低功耗中心設備

    //11.開啟藍牙配接器 openBluetoothAdapter //21.開始搜索藍牙設備 startBluetoothDevicesDiscovery //31.開啟監聽搜索藍牙設備 onBluetoothDeviceFound //30.停止監聽搜索藍牙設備 offBluetoothDevi ......

    uj5u.com 2023-03-15 09:06:45 more
  • canvas畫板(滑鼠和觸摸)

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>canves</title> <style> #canvas { cursor:url(../images/pen.png),crosshair; } #canvasdiv{ bo ......

    uj5u.com 2023-02-15 08:56:31 more
  • 手機端H5 實作自定義拍照界面

    手機端 H5 實作自定義拍照界面也可以使用 MediaDevices API 和 <video> 標簽來實作,和在桌面端做法基本一致。 首先,使用 MediaDevices.getUserMedia() 方法獲取攝像頭媒體流,并將其傳遞給 <video> 標簽進行渲染。 接著,使用 HTML 的 < ......

    uj5u.com 2023-01-12 07:58:22 more
  • 記錄--短視頻滑動播放在 H5 下的實作

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 短視頻已經無數不在了,但是主體還是使用 app 來承載的。本文講述 H5 如何實作 app 的視頻滑動體驗。 無聲勝有聲,一圖頂百辯,且看下圖: 網址鏈接(需在微信或者手Q中瀏覽) 從上圖可以看到,我們主要實作的功能也是本文要講解的有: ......

    uj5u.com 2023-01-04 07:29:05 more
  • 一文讀懂 HTTP/1 HTTP/2 HTTP/3

    從 1989 年萬維網(www)誕生,HTTP(HyperText Transfer Protocol)經歷了眾多版本迭代,WebSocket 也在期間萌芽。1991 年 HTTP0.9 被發明。1996 年出現了 HTTP1.0。2015 年 HTTP2 正式發布。2020 年 HTTP3 或能正... ......

    uj5u.com 2022-12-24 06:56:02 more
  • 【HTML基礎篇002】HTML之form表單超詳解

    ??一、form表單是什么

    ??二、form表單的屬性

    ??三、input中的各種Type屬性值

    ??四、標簽 ......

    uj5u.com 2022-12-18 07:17:06 more