首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将“混合基”字符串转换为ASCII。

将“混合基”字符串转换为ASCII。
EN

Code Golf用户
提问于 2016-02-16 20:01:35
回答 1查看 392关注 0票数 8

如果一个字符串输入的字节可以是二进制、八进制或十六进制,则输出该字符串的ASCII等效值。

输入将以以下格式提供,例如:

代码语言:javascript
运行
复制
501200100001147

代表

代码语言:javascript
运行
复制
0x50 0o120 0b01000011 0x47

(在ASCII中)相当于

代码语言:javascript
运行
复制
PPCG

二进制、八进制和十六进制将分别提供8、3和2位数字。

为了解决这一挑战,必须只支持可打印的ASCII。这是包含32..126的范围。因此,不可能有歧义。请注意,

  • 字符串表示二进制的当且仅当它以0开头,并且它的第二个字符是01。所有可打印的ASCII字符都以二进制(即以0开头)进行高位关闭,并且没有一个字符以十六进制或八进制的0001开头。
  • 如果使用二进制格式,请注意,所有可打印的ASCII字符都以十六进制的2-7和八进制的0-1开头。因此,有可能明确区分十六进制和八进制。

您可以假设十六进制输入是以小写或大写形式提供的,以更方便的方式提供。

Regex使挑战的解析部分变得微不足道。我不想直接禁止regex的使用,但是如果您的非regex解决方案比使用regex的解决方案更长,可以随心所欲地发布它和“真正的”答案,因为我也有兴趣看到它。:)

由于这是密码-高尔夫,以字节为单位的最短代码将获胜。

测试用例:

代码语言:javascript
运行
复制
In                   Out
-----------------------------------
501200100001147    | PPCG
5C01101111100      | \o@
313206306400110101 | 12345
2A200530402C       | * + ,
0011111100111111   | ??
<empty string>     | <empty string>
EN

回答 1

Code Golf用户

发布于 2016-02-16 23:00:47

Python 3,165个字节

无Regex

代码语言:javascript
运行
复制
x=input();i=0;s=""
while i<len(x):
 a=x[i:i+2];c=int(a[0])
 if a in["00","01"]:y=8;b=2
 elif 1<c<8:y=2;b=16
 elif c<2:y=3;b=8
 s+=chr(int(x[i:i+y],b));i+=y
print(s)
票数 0
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/73309

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档