Jag har installerat Gammu för att kunna skicka och ta emot SMS från en mobiltelefon kopplad till datorn. Jag kör smsd som är kopplat till en MySQL-databas. Tekniskt sett kan jag både skicka och ta emot SMS men när jag skickar (vilket görs genom att helt enkelt lägga in en rad i en tabell i databasen) så ska jag koda texten och jag vet inte riktigt hur det ska gå till. Eftersom jag kan ta emot SMS utan problem så råkar jag veta t.ex. att
"005900650073002C002000670061006D006D00750020007300750078002000690066002000770065002000630061006E00270074002000610063006300650073007300200073006D007300200065006100730069006C00790021" = "Yes, gammu sux if we can't access sms easily!"
Jag är ute efter en algoritm att koda sms alltså. Beror kodning på mottagarens nummer? Fick för mig det när jag googlade runt. Stötte även på uttrycket PDU encoding.
Okej, men då är det något mer som måste göras. Så här ser tabellen för att skicka ett SMS ut:
CREATE TABLE outbox (
UpdatedInDB timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
InsertIntoDB timestamp NOT NULL default '0000-00-00 00:00:00',
SendingDateTime timestamp NOT NULL default '0000-00-00 00:00:00',
`Text` text,
DestinationNumber varchar(20) NOT NULL default '',
Coding enum('Default_No_Compression','Unicode_No_Compression','8bit','Default_Compression','Unicode_Compression') default '8bit',
UDH text,
Class int(11) default '-1',
TextDecoded varchar(160) NOT NULL default '',
ID int(11) unsigned NOT NULL auto_increment,
MultiPart enum('false','true') default 'false',
RelativeValidity int(11) default '-1',
SenderID text,
SendingTimeOut timestamp NULL default '0000-00-00 00:00:00',
DeliveryReport enum('default','yes','no') default 'default',
CreatorID text NOT NULL,
UNIQUE KEY ID (ID)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=13 ;
Det jag fyller i är Text, DestinationNumber och TextDecoded. Ett SMS går iväg men i min mobil står det att jag inte kan läsa innehållet. Måste jag kanske fylla i UDH också? Coding är förvalt till 8bit, osäker på om det ska vara det.
Ahh, nu fungerar det, om jag väljer Default_No_Compression, men eftersom 8bit var default så trodde jag det var det som gällde. Nåväl, nu fungerar det. Tack! Nu kan jag leka vidare :)
I C använder du printf med %X för att skriva ut tecknet som hex.
char str[] = "Test";
int i;
for (i = 0; i < strlen(str); i++)
{
printf("00%X", str[i]);
}
Jag har för mig att printf funkar på samma sätt i php.
Jag letar efter motsvarande för PHP. Hur ser det ut? printf med %x för ett tecken ger bara 0 hela tiden av någon anledning.
T.ex. printf("%x", 'T'); ger 0.