---
title: "Koda SMS"
type: "forum-thread"
url: "https://www.webforum.nu/amne/programmering/149302-koda-sms"
topic: "Programmering"
topic_url: "https://www.webforum.nu/amne/programmering"
author: "Gein"
published: "2006-07-22T13:42:30.000Z"
updated: "2006-07-22T20:42:13.000Z"
replies: 10
views: 710
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/programmering/149302-koda-sms"
---

# Koda SMS

## #1 — Gein, 2006-07-22T13:42Z

Jag har installerat [Gammu](http://www.gammu.org/wiki/index.php?title=Gammu:Main_Page) 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.

Permalänk: https://www.webforum.nu/p/149302

## #2 — tydal, 2006-07-22T13:55Z

Det du har där är unicodetecknen uttryckta i hex. Kakbit. Vilket programmeringsspråk vill du använda?

Permalänk: https://www.webforum.nu/p/1843924

## #3 — tydal, 2006-07-22T14:00Z

00480065006C006C006F00200057006C0072006C00640021

Permalänk: https://www.webforum.nu/p/1843926

## #4 — Gein, 2006-07-22T14:02Z

Det blir väl främst PHP men kanske även C eller så. Därför jag ville ha en algoritm. Men det kanske finns färdiga funktioner för detta i PHP?

Permalänk: https://www.webforum.nu/p/1843927

## #5 — tydal, 2006-07-22T14:05Z

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.

Permalänk: https://www.webforum.nu/p/1843928

## #6 — tydal, 2006-07-22T14:10Z

Detta förutsätter dock att det är en vanlig asciisträng du har. Är det unicode du har redan från början kan du ta bort 00 från printf-strängen.

Har du inte unicode behöver du köra search-and-replace på å, ä och ö innan.

å är C3A5, ä C3A4 och ö C3B6. Minns dock inte hur det är med små och stora bokstäver, men du hittar teckentabeller på <http://www.unicode.org/>

Permalänk: https://www.webforum.nu/p/1843929

## #7 — Gein, 2006-07-22T14:11Z

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:

```php
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.

Permalänk: https://www.webforum.nu/p/1843931

## #8 — Gein, 2006-07-22T14:13Z

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 :)

Permalänk: https://www.webforum.nu/p/1843932

## #9 — Gein, 2006-07-22T20:37Z

> **tydal skrev:**
>
> 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.

Permalänk: https://www.webforum.nu/p/1844047

## #10 — tydal, 2006-07-22T20:39Z

Just ja, i php måste man ju använda funktionen ord() för att få fram värdet...

printf("%X", ord('T');

Permalänk: https://www.webforum.nu/p/1844050

## #11 — Gein, 2006-07-22T20:42Z

Tackar! Lyckades hitta denna funktion också (lite modifierad):

```php
function strhex($string) {
   $hex = '';
   $len = strlen($string);
   for ($i = 0; $i < $len; $i++) {
       $hex .= "00".str_pad(dechex(ord($string[$i])), 2, 0, STR_PAD_LEFT);
   }
   return $hex;
}
```

Vilken lösning är att föredra?

red/ Jag vågar anta att din lösning är snabbare.

Permalänk: https://www.webforum.nu/p/1844052

---

Tråden på webben: https://www.webforum.nu/amne/programmering/149302-koda-sms
