八位字符串:它是啥?
Posted
技术标签:
【中文标题】八位字符串:它是啥?【英文标题】:Octet String: What is it?八位字符串:它是什么? 【发布时间】:2010-11-17 11:50:45 【问题描述】:我开始为我即将接手的项目研究一些网络编程概念,并且我不断遇到八位字节字符串的概念。任何人都可以就这是什么以及它与网络编程的关系提供一些反馈吗?
【问题讨论】:
【参考方案1】:八位字节 = 字节。
八位字节串 = 字节序列。
另外,请参阅Wikipedia。
【讨论】:
【参考方案2】:“八位字节”是“8 位字节”的标准格式。与仅“字节”相比,它应该是一个不那么含糊的术语,因为某些平台具有不同宽度的字节(不确定是否还有剩余,但它们曾经存在)。
【讨论】:
【参考方案3】:假设二进制 00000000 到 11111111 表示为十六进制的 0x00 到 0xFF。那么 octetString 就是 00 到 FF。
将几个八位组组合成一个字符串就像 0x00 0x01 0x02 ... 或简单地将 000102.. 作为一个八位组。
二进制文件可以编码为八位字节串,并以包含 0-F 字母的 ASCII 字符串形式从 webbclient 发送到服务器,例如 a8b9457fc6e3e410589f 或其大写字母。有使用 BASE-64 编码的 javascript 用于将图片存储在字符串中。字母表越大,在这种情况下(我认为)A-Z、a-z、0-9,需要传输的数据就越少。每个八位字节有 256 个不同的可能值,并且将存储在 62 个字母的字母表中,显然需要使用多个字母/八位字节。可能理论数与 log62(256) 成正比。
结论是改进的可读性比它的二进制版本占用更多的空间,在八位字节流示例中,它的长度是八位字节的两倍,因为每个 ascii 字符是八位,而 2 个字符(16 位)代表一个八位字节,它是八位。相当低效。
【讨论】:
【参考方案4】:八位字节串:
它是有限 8 位模式下的信息表示。在将数据从一个电子设备点传输到另一个设备点或任何其他设备的过程中,它需要将它们转换为最小尺寸的包。所以它用于将主要数据划分为小而系统易于理解的数据。例如: 所以整数 2680,二进制 101001111000 将被转换为 7 位格式,如下所示:
Remaining integer-------------------encoded bytes
101001111000------------------------
10100-------------------------------01111000
0-----------------------------------11111000
&00010100
分别用十进制表示为 (120) (20)。 然后将 120 除以 16 作为结果 = 7 & 提醒 = 8 再次将 20 除以 16 作为结果 = 1 & 提醒 = 4
数字的新形式是0X78 + 0X14
这里的 78 和 14 是八位字节字符串。
将它们编码到正常阶段:((16*7)+8)*128^0+((16*1)+4)*128^1 = 2680
我认为这是更好的解释,但我仍在寻找更多相关信息。请帮助我了解字母表。我认为这取决于它的 ASCII 值。
【讨论】:
【参考方案5】:计算机中的一组 8 位称为八位字节。对于大多数实际目的而言,一个字节是相同的,但在所有计算机体系结构上并不等于 8 位。 更多可以在这里找到.. Link
【讨论】:
【参考方案6】:Octet
是计算机中提到8位数据的术语。 Byte
是提到在计算机中对字符串字符进行编码所需的位数的术语。
Octet
始终为 8 位。但是Byte
的大小取决于硬件。大多数系统都支持ASCII编码字符串的方式。在那些机器中Byte
大小是八位。一些支持unicode的硬件是使用16bits作为一个Byte
。
【讨论】:
【参考方案7】:在抽象语法符号一 (ASN.1) 中,可变长度的八位字节序列被称为八位字节字符串。
【讨论】:
那么这可以例如意味着一个(1字节)字符序列吗?像一个 c 字符串(当然除了空终止)?【参考方案8】:术语“八位字节”用于避免歧义,因为一些旧计算机每个字节的位数不同。
与顾名思义不同,这种数据类型是not limited to string values
,但可以存储任何基于字节的数据类型(包括二进制数据)。
下面是一个基于 Java 的类,它尝试将 Decimal 转换为其 OctetString。
public class deboctetstring
private String findOctet (int num)
int rem;
String output ="";
char ind[] = 0,1,2,3,4,5,6,7;
while (num > 0)
rem = num%8;
output = ind[rem] + output;
num = num/8;
return output;
public static void main(String[] args)
System.out.println("Start octet test");
deboctetstring deboct = new deboctetstring();
int x = 72;
String octetval = deboct.findOctet(x);
System.out.println("Octet Value of Decimal "+ x + " is: "+ octetval );
【讨论】:
【参考方案9】:这是一个将十进制转换为八进制字符串的python3代码: 很简单
Number = 2680
Bin = format(Number, 'b')
Sp = [hex(int(Bin[::-1][i:i+7][::-1],2)) for i in range(0, len(Bin), 7)]
print(Sp)
【讨论】:
以上是关于八位字符串:它是啥?的主要内容,如果未能解决你的问题,请参考以下文章