【问题标题】:why byte ordering (endianess) is not an issue for standard C string?为什么字节顺序(字节序)不是标准 C 字符串的问题?
【发布时间】:2014-01-15 23:33:46
【问题描述】:

我的教授提到byte ordering (endianess)standard C String (Char arrays) 来说不是问题:

例如:char[6]="abcde";

但他没有解释原因?

对此的任何解释都会有所帮助

【问题讨论】:

  • 您预计在什么情况下可能会出现问题?
  • 我不知道他的意思。这就是为什么我要求解释
  • 只有当单个元素大于 1 字节时才会有所不同。由于字符串是单字节元素的数组,因此无需考虑。

标签: c string endianness


【解决方案1】:

字节序仅在您拥有多字节数据(如整数和浮点数)时才重要。标准 C 字符串由 1 字节字符组成,因此您无需担心字节顺序。

【讨论】:

  • Bit endianness,在 1 个字节内,确实在选择编码问题中起作用。
【解决方案2】:

char 只占用一个字节,这就是为什么排序无关紧要。例如,int 有 4 个字节,这些字节可以按 little-endian 和 big-endian` 排列。

例如:0x00010204在内存中可以有两种排列方式:

04 02 01 00 or 00 01 02 04

char 作为单字节将作为单字节提取到CPU。而String 只是一个chararray。

【讨论】:

  • Java是不是也一样?
  • @eagertoLearn:我记得,Java 字符串使用 16 位字符,因此字节顺序可能是个问题——但前提是您将 Java 字符串当作字节数组来访问,您通常不会这样做。
  • 是的,Java char 使用 2-bytes 而不是 C 中的 1 bytes。我不知道Java是否在内部将String存储为char array
  • @user1988876 大端表示应该是00 01 02 04 而不是00 01 02 03 04
【解决方案3】:

内存存储的最小单位是 1 字节,如果你有一个 4 字节的值(例如:0x01234567) 它将在连续位置按字节顺序排列和获取

大端:01 23 45 67 小端:67 45 23 01

而对于一个 1 字节的值,它可以从一个内存位置本身获取,因为这是最小的内存块,不需要字节排序。

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-18
    • 1970-01-01
    • 2010-12-13
    • 2010-09-30
    • 1970-01-01
    相关资源
    最近更新 更多