将输入中的数据以二进制形式写入和存储,例如数组

Posted

技术标签:

【中文标题】将输入中的数据以二进制形式写入和存储,例如数组【英文标题】:Write and store data from input as binary, like an array 【发布时间】:2021-11-06 06:13:38 【问题描述】:

我需要从用户那里获取一个输入(范围从 1 到 12)并将数据存储为二进制。 (不能使用数组) 例如:如果用户输入 3,则返回 000000000100。(右起第三位)

我认为这可以通过日志算法实现,但我真的不知道从哪里开始。我该怎么做?任何帮助表示赞赏。

【问题讨论】:

...你想返回字符串"000000000100",还是二进制值100,也就是数字4? 1 << (n-1) 将计算该值 @khelwood 我需要它是 12 个字节,因为这需要多个输入,所以 000000000100 您要返回什么类型的值?一个字符串?一个整数?一个数组? 我们的目标是让它成为一个可以像数组一样读取的 int。我的意思是用户可以输入多个数字,相应的字节将变为 1。例如。 1 = 000000000001;输入 2 和 1 将是 000000000011 【参考方案1】:

如果我正确地阅读了这个问题,您将被输入数字 1-12,并且根据输入的数字,您需要返回一个二进制字符串,其中给出的任何位置的位都等于 1(没有列表/数组)。为了实现这一点,您可以将值读入一个集合,然后构造一个字符串,其中输入的值为 1,其他所有值都为零。像这样:

def read_in():
    positions = set()
    while True:
        print('Enter 1-12 or Q to stop:',end=' ')
        entry = input()
        if entry != 'Q':
            positions.add(int(entry))
        else:
            break
    ret = ''
    for i in range(12,0,-1):
        if i in positions:
            ret += '1'
        else:
            ret += '0'
    return ret
print(read_in())

【讨论】:

非常感谢!【参考方案2】:

如果您想在多个输入中多次将任何索引更新为 1,您可能需要使用包含 12 个可以勾选的元素的 list。然后使用该列表,您已经可以获得两个字符串值,例如"000000000100" 和 int 值,例如4

# Initialize list that we will tick
bin_digits = ["0"] * 12

# Let's assume that the input from user is from 1 to 12
for num in range(1, 13):
    # Tick the target index
    bin_digits[-num] = "1"

    bin_str = "".join(bin_digits)  # String value
    bin_int = int(bin_str, 2)  # Int value

    print(bin_digits, bin_str, bin_int)

输出

['0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1'] 000000000001 1
['0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '1'] 000000000011 3
['0', '0', '0', '0', '0', '0', '0', '0', '0', '1', '1', '1'] 000000000111 7
['0', '0', '0', '0', '0', '0', '0', '0', '1', '1', '1', '1'] 000000001111 15
['0', '0', '0', '0', '0', '0', '0', '1', '1', '1', '1', '1'] 000000011111 31
['0', '0', '0', '0', '0', '0', '1', '1', '1', '1', '1', '1'] 000000111111 63
['0', '0', '0', '0', '0', '1', '1', '1', '1', '1', '1', '1'] 000001111111 127
['0', '0', '0', '0', '1', '1', '1', '1', '1', '1', '1', '1'] 000011111111 255
['0', '0', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1'] 000111111111 511
['0', '0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1'] 001111111111 1023
['0', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1'] 011111111111 2047
['1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1', '1'] 111111111111 4095

【讨论】:

以上是关于将输入中的数据以二进制形式写入和存储,例如数组的主要内容,如果未能解决你的问题,请参考以下文章

在 Matlab 中读取和写入二进制文件

为啥mongodb以base64的形式存储二进制数据?

通过 libcurl 以二进制形式传输的文件已损坏

C++学习49 对二进制文件的读写操作

从整数转换为其二进制表示

java输入与输出