我正在编写一个处理基因序列的程序,我想将每个核苷酸存储在一个字节中,其中每个位代表基因字母表中的一个字母A,C,G,T
(只有一半这些位将被明显地使用)。用typedef和enum代表C中的DNA字母
我的编码如下:
A = 0b1000
C = 0b0100
G = 0b0010
T = 0b0001
R = 0b1010
Y = 0b0101
N = 0b0000
这里,R
是嘌呤,它可以代表A
或G
,Y
是嘧啶(C
或T
)和N
可以站在中任一字母。
什么是使用typedef
和enum
在C中定义这种格式的最佳方式?我想定义一个类型,让我的名字,例如指定了一封信给一个变量
typedef ... nucleotide_t;
nucleotide_t x[] = {G, A, T, T, A, C, A};
编辑:感谢您的输入。我绝对有我的理由不想字符串,但谢谢你的建议。确实,逻辑上,N
应该是0b1111
,但对于我的应用程序来说,将其表示为以上都不是。
请注意,我做有一个想法如何使这项工作,但我不会打破醇过于频繁,我宁可寻找最优雅的解决方案是什么。我想如果我想保留NUL
字节,那么我可以在我的代码处添加0b10000
。
我认为两种可行的方法是enum
或一些#define
宏。然而,枚举是int
,我需要一个char
,所以宏是更好的解决方案?
也许你可以使用像'的#define A(0b1000)'或'的#define A(0x8中)'。分享并享受。 –
+1为标题 - 让我想起19世纪英国旅行的旧时代,例如“用火炮和蝴蝶网穿越非洲”。 –
除非这种编码大大提高了性能,否则我只会使用ASCII字符。这样你可以使用'strstr'和类似的函数来处理以空字符结尾的字符串。如果确实需要位模式具有特殊含义,则至少应避免使用值0,这样您仍然可以在序列中使用字符串函数。 –