我最近决定开展短信项目,通过手机发送和接收短信。
数据以PDU格式发送 - 我需要将ASCII字符更改为7位GSM字母字符。为此,我遇到了几个例子,例如http://www.dreamfabric.com/sms/hello.html
此示例显示第二个septet的最右边位,插入到第一个septect中,以创建一个八位字节。
按位移位不会导致这种情况发生,因为>>将插入左侧,<<在右边。据我了解,我需要某种按位旋转来创建它 - 有人能告诉我如何从右侧移动位并将它们插入左侧吗?
谢谢,
答案 0 :(得分:3)
这是一个快速算法:
int b1, bnext;
int mod;
int pand;
char *b; // this is your byte buffer, with message content
int blen; // this is your byte buffer length
char sb[160];
int totchars = 0;
b1 = bnext = 0;
for (int i=0; i < blen; i++) {
mod = i%7;
pand = 0xff >> (mod + 1);
b1 = ((b[i] & pand) << mod) | bnext;
bnext = (0xff & b[i]) >> (7 - mod);
sb[totchars++] = (char)b1;
if (mod == 6) {
sb[totchar++] = (char)bnext;
bnext = 0;
}
}
sb[totchar] = 0;
它会将7位压缩缓冲区转换为C中的常规ASCII字符数组。
答案 1 :(得分:0)
任何人都可以告诉我如何移动位 从右手侧插入 他们在左边?
C中有间接的方法,但我只是这样做:
void main()
{
int x = 0xBAADC0DE;
__asm
{
mov eax, x;
rol eax, 1;
}
}
这将向左旋转(不移位!)位(一步)。 “ror”将向右旋转。