Redian新闻
>
C 语言,2进制转16进制,输入问题
avatar
C 语言,2进制转16进制,输入问题# Programming - 葵花宝典
j*0
1
请问B2签证过来待一或两个月的时间,买什么保险比较好一点呢?
avatar
r*8
2
C 语言,2进制转16进制,输入问题。
我有数据是2进制的像这样“100110010101”现在是字符串形式,很长有100位数左右。
我所知道的2进制输入串行口要这样:
Send_string[0] = 0x65;
Send_string[1] = 0x68;
write(port_A, Send_string, strlen(Send_string));
我的问题:怎么把“100110010101”字符串变为 0x65,0x68、、、放入 Send_string?
哪位大侠指个方向,我去细看。
谢谢!
avatar
S*A
3
不就是直接input string 用测试 01 然后shift 进register吗。
类似这样, 我没有编译过,不知道能运行不:
void str2bin(const char *input, int size, unsigned char *output)
{
const char *end = input + size;
unsigned char value, i;
while (input < end) {
for (i = 0, value = 0; i < 8 && input < end; i++) {
value <<= 1
value |= (*input++ - '0') & 1;
}
*output++ = value;
}
}
avatar
r*8
4
很有启发,我去试试。
谢谢!

【在 S*A 的大作中提到】
: 不就是直接input string 用测试 01 然后shift 进register吗。
: 类似这样, 我没有编译过,不知道能运行不:
: void str2bin(const char *input, int size, unsigned char *output)
: {
: const char *end = input + size;
: unsigned char value, i;
: while (input < end) {
: for (i = 0, value = 0; i < 8 && input < end; i++) {
: value <<= 1
: value |= (*input++ - '0') & 1;

avatar
r*8
5
SSA (草虫) 太牛了,程序运行完全正确。
我没看懂,能不能大致解释一下?
我另有2个具体问题:
1. value <<= 1;
开始的时候,value = 0,在内存的某个位置,移一位怎么理解?
2. value |= (*input++ - '0') & 1; 这句什么意思?
Input向前移一位。-‘0’,还有这个&1是什么意思?

谢谢!

【在 S*A 的大作中提到】
: 不就是直接input string 用测试 01 然后shift 进register吗。
: 类似这样, 我没有编译过,不知道能运行不:
: void str2bin(const char *input, int size, unsigned char *output)
: {
: const char *end = input + size;
: unsigned char value, i;
: while (input < end) {
: for (i = 0, value = 0; i < 8 && input < end; i++) {
: value <<= 1
: value |= (*input++ - '0') & 1;

avatar
d*n
6

内存没动,value乘2

*input++, 字符串操作,找下一个字符
-'0'
对齐ascii
还有这个&1是什么意思?
0 或者 1 与 1 求 & 操作
最后把所有的value都提进去

【在 r*****8 的大作中提到】
: SSA (草虫) 太牛了,程序运行完全正确。
: 我没看懂,能不能大致解释一下?
: 我另有2个具体问题:
: 1. value <<= 1;
: 开始的时候,value = 0,在内存的某个位置,移一位怎么理解?
: 2. value |= (*input++ - '0') & 1; 这句什么意思?
: Input向前移一位。-‘0’,还有这个&1是什么意思?
:
: 谢谢!

avatar
r*8
7
非常感谢!
我明白多了,快要全懂了。

【在 d****n 的大作中提到】
:
: 内存没动,value乘2
:
: *input++, 字符串操作,找下一个字符
: -'0'
: 对齐ascii
: 还有这个&1是什么意思?
: 0 或者 1 与 1 求 & 操作
: 最后把所有的value都提进去

avatar
S*A
8

因为你要做两件事情,要把 ASCII 的 “0”,“1” 变成 binary 的 0,1
bit. 得到 bit 以后,以后要合并到 byte 里面。
这个移位就是把 byte 里面低的位移上去,给后面的 |= 腾位置。
-‘0’ 是 ASCII 变道 bit。 &1 是确保 input里面如果有垃圾
不是 ‘0’ 或者 ‘1’ 的不会 OR 超过一个 bit。

【在 r*****8 的大作中提到】
: SSA (草虫) 太牛了,程序运行完全正确。
: 我没看懂,能不能大致解释一下?
: 我另有2个具体问题:
: 1. value <<= 1;
: 开始的时候,value = 0,在内存的某个位置,移一位怎么理解?
: 2. value |= (*input++ - '0') & 1; 这句什么意思?
: Input向前移一位。-‘0’,还有这个&1是什么意思?
:
: 谢谢!

avatar
r*8
9
@ SSA (草虫)
谢谢您!
您的程序我只做了很小的改动就能运行了。
我要把这个程序放长期运行,例如几个月,运行几千遍以上。
劳驾您再看看,有没有可能出现 Memory leak?
我对那几个*有点担心。
void str2bin(const char *input, int size, unsigned char *output)
{
const char *end = input + size;
unsigned char value, i;
while (input < end) {
for (i = 0, value = 0; i < 8 && input < end; i++) {
value <<= 1
value |= (*input++ - '0') & 1;
}
*output++ = value;
}
}

【在 S*A 的大作中提到】
:
: 因为你要做两件事情,要把 ASCII 的 “0”,“1” 变成 binary 的 0,1
: bit. 得到 bit 以后,以后要合并到 byte 里面。
: 这个移位就是把 byte 里面低的位移上去,给后面的 |= 腾位置。
: -‘0’ 是 ASCII 变道 bit。 &1 是确保 input里面如果有垃圾
: 不是 ‘0’ 或者 ‘1’ 的不会 OR 超过一个 bit。

avatar
a*g
10
你又没有申请和释放内存,不会 leak 的

【在 r*****8 的大作中提到】
: @ SSA (草虫)
: 谢谢您!
: 您的程序我只做了很小的改动就能运行了。
: 我要把这个程序放长期运行,例如几个月,运行几千遍以上。
: 劳驾您再看看,有没有可能出现 Memory leak?
: 我对那几个*有点担心。
: void str2bin(const char *input, int size, unsigned char *output)
: {
: const char *end = input + size;
: unsigned char value, i;

avatar
r*8
11
找到了,C 语言如何给Bit 位赋值。
http://zhidao.baidu.com/question/557196586.html
void main(){ //比特位[6 5 4 3 2 1 0]
int i = 100; //i = 1 1 0 0 1 0 0
i |= (1<<3); //i = 1 1 0 1 1 0 0
// ^__将第3比特置为1,i=108
}
avatar
S*A
12
你以为那是 Java/C++ 啊,C 里面 你都没有分配内存,
那里来的内存泄露。

【在 r*****8 的大作中提到】
: @ SSA (草虫)
: 谢谢您!
: 您的程序我只做了很小的改动就能运行了。
: 我要把这个程序放长期运行,例如几个月,运行几千遍以上。
: 劳驾您再看看,有没有可能出现 Memory leak?
: 我对那几个*有点担心。
: void str2bin(const char *input, int size, unsigned char *output)
: {
: const char *end = input + size;
: unsigned char value, i;

avatar
r*8
13
你这个*output 怎么实现的?能解释一下吗?
对不起我没看懂:
unsigned char * output
是怎么实现的,能够返回字符串?
怎么我的类似程序里都不好用啊?

【在 S*A 的大作中提到】
: 不就是直接input string 用测试 01 然后shift 进register吗。
: 类似这样, 我没有编译过,不知道能运行不:
: void str2bin(const char *input, int size, unsigned char *output)
: {
: const char *end = input + size;
: unsigned char value, i;
: while (input < end) {
: for (i = 0, value = 0; i < 8 && input < end; i++) {
: value <<= 1
: value |= (*input++ - '0') & 1;

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。